build - 文件; docker 构建卷 : changes to volume via ADD

我有一个类似这样的 dockerfile:

VOLUME /tmp/space
ADD local/directory/ /tmp/space/
RUN cp /tmp/space/somescript.sh /opt/real/space/

构建容器并获得交互式 shell 后,我注意到/tmp/space 仍然包含本地/目录中的数据。

如果我将 RUN rm -rf/tmp/space/* 添加到 dockerfile 的末尾并获得 shell 访问权限。数据仍然在/tmp/space/中。

因此,我只能使用相同的卷制作一个正在运行的容器,然后将更改后的容器提交到更新后的图像。

有没有一种方法可以在构建过程中临时加载一个不会使生成的图像膨胀的卷?

目标是使用源文件和脚本在构建过程中执行一些操作。 docker 层最终记录了 COPY/ADD 步骤和 RUN 步骤的副本。因此,最好将数据COPY 到一个未记录为层的空间,然后作为单个RUN 步骤cp stuff && execute scripts 以节省空间。

最佳答案

我不确定你想在这里做什么: VOLUME/tmp/space - 这声明了一个挂载点并将容器上的/tmp/space 映射到主机上的目录

ADD/local/directory/tmp/space - 我认为您正试图将本地目录从您的容器复制到您的挂载卷

RUN cp/tmp/space/*/opt/real/space/- 您是否正在尝试从您的卷复制到您的主机?

在 dockerfile 中添加 VOLUME 指令后,容器 /tmp/space 中的文件夹被映射到主机上的文件夹,比如 /hosttmp/hostspace强>。您可以通过运行命令来找出主机上的内容 -

$ docker inspect -f {{.Volumes}} <your_container_name>

为了防止 /hosttmp/hostspace 中的数据损坏,一旦在 dockerfile 中声明了一个 VOLUME,您就不能随意修改其中的内容。

我建议阅读这篇文章,因为它解释了相当困惑的 docker volume 概念

http://container-solutions.com/understanding-volumes-docker/

关于build - 文件; docker 构建卷 : changes to volume via ADD or COPY are not discarded,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35880181/

相关文章:

docker - 重新启动docker daemon后无法启动某些容器

amazon-web-services - 前端和后端应用程序的 Docker 示例

docker - 安装停留在Travis构建上的更高版本的docker-engine

elasticsearch - Docker Compose引发AccessDeniedExpcet

macos - Docker-Machine坚持创建默认值

docker - 无法将 docker 镜像推送到 docker 私有(private)注册表

docker - dnsmasq 跨 docker 容器的奇怪行为

docker - 存储库 <无> 标签 <无>

docker - 由 Docker 复制的文件被视为目录

docker - pkgProblemResolver::Resolve生成的中断,这可能是由保留的