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/