python在docker容器中创建目录和写入文件

python在docker容器中创建目录和写入文件,python,docker,Python,Docker,我正在编写一个现有python脚本的docker文件 我的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的一部分,用于创建目录和子

我正在编写一个现有python脚本的docker文件

我的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)
此处“下载目录”=/test\u project/download/reports/2017-01-24/

在本地docker之外运行时,它会在本地文件系统上创建目录
但是,在docker内部运行时,它不会在docker容器中创建目录。我查看了docker图像中的目录,它只有我从Dockerfile创建的目录,而没有应该从python脚本创建的子目录
知道我可能遗漏了什么吗

---更新---
我发现的另一件事是:

  • 使用“docker Build-t test_project”构建docker映像
  • 使用“docker运行测试项目”运行它
  • 当我执行此操作时,在运行之后,通过以下方式进入图像bash:

    docker run --rm -it test_project bash
    
    我看不到由python脚本创建的目录。但是,在构建项目后,我首先使用与上面相同的命令进入image bash内部,然后使用以下命令执行脚本:

    python test_project/test.py
    
    创建目录


    是不是因为每次运行后容器都被销毁,我看不到正在写入的文件/目录?

    不要使用
    docker run
    ,使用
    docker exec

    docker exec
    在已经运行的容器中运行命令。
    docker run
    每次运行时都会创建一个新容器

    在这里,您创建了两个容器。另外,当您在第二个
    docker run
    调用(
    docker run--rm-it test\u project bash
    )上启动“bash”时,您覆盖了dockerfile的CMD,因此在创建该容器时,脚本不会在该容器上运行。这就是为什么在手动运行python脚本之前,您没有看到预期的文件(在第二个容器中)

    如果您试图登录到使用
    docker run test_project
    创建的容器,则需要执行以下操作:

  • 查找您刚刚启动的特定容器的名称(可能是随机的),运行映像“test_project”:
  • $docker ps

    CONTAINER ID IMAGE命令创建的状态端口名称
    f357de526da7测试项目“python report/test.py”5分钟前上升到5分钟前

    在本例中,我们看到这个容器的名称是“虚构的居里”

  • 现在打开该容器上的外壳:
    docker exec-it-virtual_-curie bash
  • 另见:

    docker run--帮助


    docker exec--help

    也许可以发布您的
    test.py
    以及如何运行docker容器。@ChrisMcKinnel。我更新了问题。由于您以命令的形式运行了“bash”,因此它会覆盖
    CMD
    指令,而test.py不会运行。