当我使用VOLUME时,Docker正在构建期间删除下载的文件,为什么?

时间:2018-05-24 08:08:18

标签: docker

我有这个简单的Dockerfile:

FROM fabric8/java-centos-openjdk8-jdk
VOLUME /tmp

RUN curl -k -Lo /tmp/oc.tar.gz "https://mirror.openshift.com/pub/openshift-v3/clients/3.6.173.0.21/linux/oc.tar.gz" && ls -l /tmp
RUN ls -l /tmp && tar zxf /tmp/oc.tar.gz -C /usr/local/bin

必须下载文件,打印/ tmp文件夹内容,然后再次ls并提取下载文件的内容。

问题是在下载文件后(&& ls -l /tmp),但在下一个RUN ls -l /tmp文件已经不存在了。

Step 6/17 : RUN curl -k -Lo /tmp/oc.tar.gz "https://mirror.openshift.com/pub/openshift-v3/clients/3.6.173.0.21/linux/oc.tar.gz" && ls -l /tmp
 ---> Running in 5ad24909ed82
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 34.4M  100 34.4M    0     0  2489k      0  0:00:14  0:00:14 --:--:-- 5660k
total 35308
drwxr-xr-x 2 root root     4096 Mar 17 11:10 hsperfdata_root
-rwx------ 1 root root      836 Mar  2 01:07 ks-script-IAlIsB
-rw-r--r-- 1 root root 36145614 May 24 08:07 oc.tar.gz
-rw------- 1 root root        0 Mar  2 01:06 yum.log
Removing intermediate container 5ad24909ed82
 ---> 09e50e6d4d84
Step 7/17 : RUN ls -l /tmp && tar zxf /tmp/oc.tar.gz -C /usr/local/bin
 ---> Running in 49c305788ac9
total 8
drwxr-xr-x 2 root root 4096 Mar 17 11:10 hsperfdata_root
-rwx------ 1 root root  836 Mar  2 01:07 ks-script-IAlIsB
-rw------- 1 root root    0 Mar  2 01:06 yum.log
tar (child): /tmp/oc.tar.gz: Cannot open: No such file or directory

我与VOLUME /tmp有关,没有它,它可以正常工作。对此的解释是什么?

1 个答案:

答案 0 :(得分:0)

定义卷后,您将无法修改它。我对构建期间内部发生的事情的最佳猜测是,使用用于执行RUN步骤的临时容器设置临时卷,并且当RUN步骤完成时,捕获对图像的更改,其中不包括对图像的任何更改。临时卷文件。此行为是documented by docker

  

从Dockerfile中更改音量:如果有任何构建步骤   在声明卷之后更改卷内的数据   更改将被丢弃。

我也blogged on the topic here.