我有一个类似于:
的dockerfileVOLUME /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
来节省空间。
答案 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/