Docker挂载仅在交互模式下工作



我是Docker的新手,我正在尝试使用run命令的装载选项,但它们在我的linux环境中不起作用。

我有一个名为transformer的可执行文件,其目的是从名为txts目录中获取一个txt文件,将其转换为python文件,并将该文件保存到另一个名为dict目录中。在这两个文件夹之上,我有第三个文件夹(lib(,其中包含启动transformer所需的库。

所以我的项目文件夹的结构是这样的:

* folder txts
|
|__ myfile.txt
* folder dict
* folder lib <contains some cpp libraries>
* executable transformer
* Dockerfile
Path to this directory: /home/ec2-user/MyDockerTests/transformerproject/

运行变压器需要启动以下命令:

./transformer -d <path to the txt file> -o <path where you want to save the newly created python file>

有了这个,我尝试在Docker容器中运行该进程。

Dockerfile:

FROM alpine
FROM gcc
COPY . /usr/project/
ENV LD_LIBRARY_PATH=/usr/project/lib
WORKDIR /usr/project/
CMD ./transformer -d txts/myfile.txt -o dict/mytransformedfile.py

通过这个,我构建了一个图像,称之为transformercontainer

docker build --tag transformercontainer .

然而,很明显,容器运行,完成它的任务,然后立即停止,我没有我的python文件,所以下一步是将容器的dict文件夹链接到主机的dict文件。这就是我不断失败的地方。

我启动以下命令:

docker run -v /home/ec2-user/MyDockerTests/transformerproject/dict/:/usr/project/dict/ transformercontainer

而且python文件没有出现在我的主机dict文件夹中。

然后我所做的是尝试通过在交互式模式中运行来手动启动容器内的transformer可执行文件

docker run -it -v /home/ec2-user/MyDockerTests/transformerproject/dict/:/usr/project/dict/ transformercontainer

在这一点上,我直接运行了我在Dockerfile的CMD部分中编写的完全相同的命令,现在我不仅可以清楚地看到,在容器中,dict文件夹现在填充了一个新的python文件,但当我关闭容器时,我也可以在主机的dict文件夹中找到同一个python文件,所以目录装载工作得很好。

很明显,我做错了什么,但经过无数次尝试,我已经到了最后一根稻草了。

除了CMD "./transformer -d txts/myfile.txt -o dict/mytransformedfile.py中的报价外,一切似乎都很好

请尝试:CMD ./transformer -d txts/myfile.txt -o dict/mytransformedfile.py

最新更新