Dockerfile; docker build volume:不会丢弃通过ADD或COPY对卷的更改

时间:2016-03-08 23:34:57

标签: build docker volume dockerfile

我有一个类似于:

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

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

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

因此,我将使用相同的卷创建一个正在运行的容器,然后将更改的容器提交到更新的映像。

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

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

1 个答案:

答案 0 :(得分:0)

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

ADD / local / directory / tmp / space - 我认为您正在尝试将容器中的本地目录复制到已安装的卷

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

在dockerfile中添加VOLUME指令后,会发生容器 / tmp / space 中的文件夹映射到主机上的文件夹,例如 / hosttmp / hostspace < / strong>即可。您可以通过运行命令 -

找出主机上的内容
$ docker inspect -f {{.Volumes}} <your_container_name>

为了防止 / hosttmp / hostspace 中的数据损坏,一旦在dockerfile中声明了VOLUME,就无法使用内容。

我建议阅读这篇文章,因为它解释了相当令人困惑的码头工作量概念

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