python创建目录并在docker容器中编写文件

时间:2017-01-25 00:16:34

标签: python docker

我正在编写现有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脚本创建的子目录。
对于我可能遗失的任何想法?

--- ---更新
我找到的另一件事是:

  1. 使用“docker build -t test_project”构建docker镜像。
  2. 使用“docker run test_project”
  3. 运行它

    当我这样做并且在跑步之后进入图像bash:

    docker run --rm -it test_project bash
    

    我没有看到python脚本创建的目录。但是,在构建项目之后,我首先使用与上面相同的命令进入图像bash,然后使用以下命令执行脚本:

    python test_project/test.py
    

    创建目录。

    是因为每次运行容器被破坏后我都看不到正在写的文件/目录了吗?

1 个答案:

答案 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创建的容器,则需要执行以下操作:

  1. 找到刚刚启动的特定容器的名称(可能是随机的),运行映像“ 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'

  1. 现在在该容器上打开一个外壳: docker exec -it imaginary_curie bash

另请参阅:

docker run --help

docker exec --help