如果在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安装量

看来你想要相反的方式(即容器是源,主机是目的地)。

这是一个解决方法:

  1. 在Dockerfile中创build卷

  2. 运行它没有-v即: docker run --name=my_container my_image

  3. 运行docker inspect --format='{{json .Mounts}}' my_container

  4. 这会给你输出类似于:

[{"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

不幸的是,我不知道如何将它装载到特定的主机目录上。