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

问题描述 投票:0回答:2

我是 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 文件夹中。

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

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

此时,我运行了我直接在 Dockerfile 的 CMD 部分中编写的相同的命令,现在我不仅可以清楚地看到,在容器内部,dict 文件夹现在填充了一个新的 python 文件,而且当我关闭容器时,我还可以在主机的 dict 文件夹中找到相同的 python 文件,因此目录挂载工作正常。

显然我做错了什么,但经过无数次尝试,我已经压垮了我。

docker containers mounted-volumes
2个回答
1
投票

除了

CMD "./transformer -d txts/myfile.txt -o dict/mytransformedfile.py

中的引用之外,一切似乎都很好

请尝试:

CMD ./transformer -d txts/myfile.txt -o dict/mytransformedfile.py


0
投票

您找到解决方案了吗?我有和你完全相同的问题。

© www.soinside.com 2019 - 2024. All rights reserved.