如果在Dockerfile中进行了更改,Docker是否会在装载时更新卷的内容?
我让Jenkins在Docker容器中运行。主目录位于主机卷中,以确保在对容器进行更新时保留生成历史记录 我已经更新了容器,在主目录中创建了一个附加文件。拉取新容器时,我看不到更改的文件如果在Dockerfile中进行了更改,Docker是否会在装载时更新卷的内容?,docker,Docker,我让Jenkins在Docker容器中运行。主目录位于主机卷中,以确保在对容器进行更新时保留生成历史记录 我已经更新了容器,在主目录中创建了一个附加文件。拉取新容器时,我看不到更改的文件 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 ${JENKIN
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,因此主机上已经存在主目录。当我拉取新容器并运行它时,我看到文件
.m2/settings.xml
没有创建。为什么会这样?基本上当你跑步时:
docker run -v /host-src-dir:/container-dest-dir my_image
您将用/host src dir
中的内容覆盖您的/container dest dir
从
此命令将主机目录/src/webapp装载到
容器位于/webapp。如果路径/webapp已存在于
容器的映像,/src/webapp装载覆盖,但不删除
预先存在的内容。卸下装载后,内容将被删除
再次访问。这与用户的预期行为一致
挂载命令
所以这个问题也是相关的
看起来您想要的是另一种方式(即容器是源,主机是目标)
以下是一个解决方法:
-v
运行它,即:docker运行--name=my_container my_image
docker-inspect--format='{{json.Mounts}}'我的容器
这意味着容器上的目录已装入主机目录/var/lib/docker/volumes/5e2d41896b9b1b0d7bc0b4ad6dfe3f926c73/_data
不幸的是,我不知道如何将其装载到特定的主机目录上。如果目录成功构建,您是否尝试在容器内部进行监视?是否确实正确重建了容器?构建过程中是否有任何错误?e、 g.由于目录不存在,无法复制文件?运行docker build
命令以完成ok;生成过程中未报告任何错误。你说在容器里看是什么意思?我已经运行了docker exec-it jenkins/bin/bash
,发现容器中没有名为.m2
的目录。请尝试在没有变量dir名称的情况下运行cp。运行mkdir/.m2 COPY settings.xml/.m2/settings.xmlNo,这没有帮助。但是,如果在运行容器之前存在主机目录/var/jenkins_home/.m2
,则会在其中创建文件settings.xml
。确定,问题是如果将主机目录装入容器,则主机目录的内容会覆盖容器的目录。我刚才的评论是错误的-我在容器中看到settings.xml
文件的原因是我使用了错误的-v
开关,这意味着卷没有正确装入,从而确保容器的settings.xml
文件可见。
$ docker run -d -P --name web -v /src/webapp:/webapp training/webapp python app.py