我正在编写现有python脚本的docker文件。
我的码头文件:
FROM python:2.7.11
ADD ./ test_project/
RUN mkdir /test_project/download/
RUN chmod -R 777 /test_project/download
WORKDIR test_project
RUN ls -ltr
CMD [ "python", "report/test.py"]`
我的python脚本test.py的一部分,用于创建目录和子目录
os.makedirs(download_directory)
这里“download_directory”= / test_project / download / reports / 2017-01-24 /
在我本地的docker外部运行时,它会在我的本地文件系统上创建目录。
但是,当在docker中运行时,它不会在docker容器中创建目录。我查看了docker镜像中的目录,它只有我从Dockerfile创建的目录,但没有应该从python脚本创建的子目录。
对于我可能遗失的任何想法?
--- ---更新
我找到的另一件事是:
当我这样做并且在跑步之后进入图像bash:
docker run --rm -it test_project bash
我没有看到python脚本创建的目录。但是,在构建项目之后,我首先使用与上面相同的命令进入图像bash,然后使用以下命令执行脚本:
python test_project/test.py
创建目录。
是因为每次运行容器被破坏后我都看不到正在写的文件/目录了吗?
答案 0 :(得分:0)
不要使用docker run
,而要使用docker exec
。
docker exec
在已经运行的容器中运行命令。
每次运行docker run
都会创建一个新容器。
在这里,您创建了两个容器。另外,当您在第二个docker run
调用(docker run --rm -it test_project bash
)上开始“ bash”操作时,您会覆盖dockerfile的CMD,因此脚本在创建时不会在该容器上运行。这就是为什么在您手动运行python脚本之前,您没有看到您期望的文件(在第二个容器中)的原因。
如果您尝试登录使用docker run test_project
创建的容器,则需要执行以下操作:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f357de526da7 test_project "python report/test.py" 5 minutes ago Up 5 minutes imaginary_curie
在这种情况下,我们看到此容器的名称为'imaginary_curie'
docker exec -it imaginary_curie bash
另请参阅:
docker run --help
和
docker exec --help