Dockerfile; docker构build卷:通过ADD或COPY更改音量不会丢弃

我有一个像这样的dockerfile:

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

容器生成后,我得到一个交互式shell,我注意到/ tmp /空间仍然包含本地/目录中的数据。

如果我将一个RUN rm -rf /tmp/space/*到dockerfile的末尾并获取shell访问权限。 数据仍然存在于/ tmp / space /中。

结果,我留下了一个正在运行的容器,使用相同的体积,然后将更改后的容器提交到更新后的图像。

有没有一种方法,在构build过程中,有一个临时加载的体积不会膨胀的结果图像?

目标是在构build期间使用源文件和脚本执行一些操作。 docker工人的层最终录制与RUN步骤COPY/ADD步骤的副本。 所以最好将数据COPY到一个空间中,而不是作为一个层被logging下来,然后作为一个单独的RUN步骤cp stuff && execute scripts来节省空间。

我不知道你在这里试图做什么:VOLUME / tmp / space – 这声明了一个挂载点,并将container上的/ tmp /空间映射到主机上的一个目录

ADD /本地/目录/ tmp /空间 – 我认为你正试图从你的容器复制本地目录到您的挂载的卷

RUN cp / tmp / space / * / opt / real / space / – 你是否试图从你的卷复制到你的主机?

在dockerfile中添加一个VOLUME指令后,会发生什么情况是container / tmp / space中的文件夹被映射到主机上的一个文件夹,例如/ hosttmp / hostspace 。 您可以通过运行命令来了解主机上的内容 –

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

为了防止/ hosttmp / hostspace中的数据被破坏 ,一旦在dockerfile中声明了VOLUME,就不能玩弄内容。

我会推荐阅读这篇文章,因为它解释了相当混乱的docker容积的概念

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