如果在Dockerfile中进行更改,Docker会在更新时更新卷的内容吗?
我有Jenkins在Docker容器中运行。 主目录位于主机卷中,以确保在对容器的更新进行操作时保留构build历史logging。
我已经更新容器,在主目录中创build一个额外的文件。 当新的容器被拉,我看不到更改的文件。
ENV JENKINS_HOME=/var/jenkins_home RUN mkdir -p ${JENKINS_HOME}/.m2 COPY settings.xml ${JENKINS_HOME}/.m2/settings.xml RUN chown -R jenkins:jenkins ${JENKINS_HOME}/.m2 VOLUME ["/var/jenkins_home"]
我正在运行这样的容器:
docker run -v /host/directory:/var/jenkins_home -p 80:8080 jenkins
我以前运行过Jenkins,因此主机上已经存在主目录。 当我拉动新的容器并运行它时,我发现没有创build.m2/settings.xml
文件。 这是为什么呢?
基本上当你运行:
docker run -v /host-src-dir:/container-dest-dir my_image
你将用/host-src-dir
覆盖你的/container-dest-dir
/host-src-dir
从文档
$ docker run -d -P --name web -v /src/webapp:/webapp training/webapp python app.py
该命令将主机目录/ src / webapp安装到/ webapp的容器中。 如果path/ web应用程序已经存在于容器的映像中,那么/ src / webapp挂载会覆盖,但不会删除预先存在的内容。 一旦挂载被删除,内容可以再次访问。 这与mount命令的预期行为一致。
这个问题也是相关的主机上的docker安装量
看来你想要相反的方式(即容器是源,主机是目的地)。
这是一个解决方法:
-
在Dockerfile中创build卷
-
运行它没有
-v
即:docker run --name=my_container my_image
-
运行
docker inspect --format='{{json .Mounts}}' my_container
-
这会给你输出类似于:
[{"Name":"5e2d41896b9b1b0d7bc0b4ad6dfe3f926c73","Source":"/var/lib/docker/volumes/5e2d41896b9b1b0d7bc0b4ad6dfe3f926c73/_data","Destination":"/var/jenkins_home","Driver":"local","Mode":"","RW":true,"Propagation":""}]
这意味着你的目录,因为它在容器上被挂载到主目录/var/lib/docker/volumes/5e2d41896b9b1b0d7bc0b4ad6dfe3f926c73/_data
不幸的是,我不知道如何将它装载到特定的主机目录上。