我是 Docker 新手,我正在尝试使用 run 命令的挂载选项,但它们在我的 linux 环境中不起作用。
我有一个名为transformer的可执行文件,其目的是从名为txts的目录中获取一个 txt 文件,将其转换为 python 文件并将此类文件保存到另一个名为dict的目录中。在这两个文件夹之上,我还有第三个文件夹(lib),其中包含启动变压器所需的库。
所以我的项目文件夹的结构是这样的:
* 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 文件,因此目录挂载工作得很好。
显然我做错了什么,但经过无数次尝试后,我已经是最后一根稻草了。