首页 > 解决方案 > Docker 运行:挂载卷未显示文件更改

问题描述

我正在努力运行最新的更改。以下是详细信息。

Dockerfile

FROM python:3.7.3

RUN mkdir -p /usr/apps

COPY test.py /usr/apps

RUN pip install mindsdb
CMD [ "python","test.py" ]

建造

docker build -t py37:custom . 

docker run -it -v /Development/PetProjects/mindsdb:/usr/apps/  py37:custom

但它仅显示构建时的更改。

标签: pythonpython-3.xdocker

解决方案


首先,在启动容器时,您没有使用卷,而是bind mounts. 因此,您将/Development/PetProjects/mindsdb主机上的目录挂载到/usr/apps/目录。对该目录中主机上的文件所做的每项更改都将在容器中可见,反之亦然。

如果你想使用卷,你可以使用docker volume create命令创建一个,然后使用这个卷运行容器:docker container run -v volume_name:path_in_container image_name。然后,您可以通过将此卷传递给运行命令来停止容器并再次运行它,并且path_in_container可以跨容器创建存储对目录的更改。

另一件事是你试图/usr/apps/在你的容器中挂载并且你使用 Dockerfile 复制了一个 python 脚本。请注意,您当前docker run的命令内容/Development/PetProjects/mindsdb 将替换 /usr/apps/容器中的内容,如果您没有脚本,/Development/PetProjects/mindsdb则脚本将在容器中不可见。

此外CMD,由于路径相对性,您似乎无法正常工作。您应该将您的 CMD 更改为CMD [ "python","/usr/apps/test.py" ]或使用WORKDIR选项 -WORKDIR /usr/apps/这样您的 python 命令就可以从这个目录执行并且脚本可以在那里可见。

有关卷和绑定挂载之间差异的更多信息可以在docker 文档中找到。


推荐阅读