【问题标题】:Does Docker update contents of volume when mounted if changes are made in Dockerfile?如果在 Dockerfile 中进行了更改,Docker 是否会在挂载时更新卷的内容?
【发布时间】:2017-05-23 08:24:51
【问题描述】:

我让 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 ${JENKINS_HOME}/.m2
VOLUME ["/var/jenkins_home"]

我正在像这样运行容器:

docker run -v /host/directory:/var/jenkins_home -p 80:8080 jenkins

我之前运行过 Jenkins,因此主机上已经存在主目录。当我拉出新容器并运行它时,我看到文件.m2/settings.xml 没有创建。请问这是为什么?

【问题讨论】:

  • 如果目录构建成功,您是否尝试过观察容器内部?你确定你正确地重建了容器吗?构建过程中是否有任何错误?例如由于目录不存在,无法复制文件?
  • docker build 命令运行完成 ok;在构建过程中没有报告错误。你是什​​么意思观察容器内?我已经运行docker exec -it jenkins /bin/bash 并看到容器内没有名为.m2 的目录。
  • 在没有变量目录名的情况下尝试 cp。运行 mkdir /.m2 复制 settings.xml /.m2/settings.xml
  • 不,这没有帮助。但是,如果主机目录 /var/jenkins_home/.m2 在运行容器之前存在,则在其中创建文件 settings.xml
  • 好的,问题是如果主机目录被挂载到容器,那么容器的目录会被主机目录的内容覆盖。我刚刚发表的评论是错误的 - 我在容器内看到 settings.xml 文件的原因是因为我使用了不正确的 -v 开关,这意味着卷没有正确安装,从而确保容器的 settings.xml文件可见。

标签: docker


【解决方案1】:

基本上在你跑步的时候:

docker run -v /host-src-dir:/container-dest-dir my_image

您将使用/host-src-dir 中的内容覆盖您的/container-dest-dir

来自Docs

$ docker run -d -P --name web -v /src/webapp:/webapp training/webapp python app.py

此命令将主机目录 /src/webapp 挂载到 /webapp 中的容器。如果路径 /webapp 已经存在于 容器的镜像,/src/webapp 挂载覆盖但不删除 预先存在的内容。移除挂载后,内容为 再次访问。这与预期的行为一致 挂载命令。

这个 SO 问题也很相关docker mounting volumes on host

您似乎希望反过来(即容器是源,主机是目标)。

这里有一个解决方法:

  1. 在 Dockerfile 中创建卷

  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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-21
    • 1970-01-01
    • 2017-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多