在mkdir之后触摸文件时,构buildDockerfile失败

我是Docker的新手,尝试用一个简单的Dockerfile构build一个图像:

FROM jenkins USER root RUN mkdir -pv /home/a/b RUN touch /home/a/b/test.txt RUN mkdir -pv /var/jenkins_home/a/b RUN touch /var/jenkins_home/a/b/test.txt USER jenkins 

当我构build它时,它会失败并显示以下输出:

 Step 0 : FROM jenkins Step 1 : USER root Step 2 : RUN mkdir -pv /home/a/b mkdir: created directory '/home/a' mkdir: created directory '/home/a/b' Step 3 : RUN touch /home/a/b/test.txt Step 4 : RUN mkdir -pv /var/jenkins_home/a/b mkdir: created directory '/var/jenkins_home/a' mkdir: created directory '/var/jenkins_home/a/b' Step 5 : RUN touch /var/jenkins_home/a/b/test.txt touch: cannot touch '/var/jenkins_home/a/b/test.txt': No such file or directory 

谁能告诉我,我在这里错过了什么? 为什么第一个mkdir和触摸组合工作,第二个没有?

看看https://registry.hub.docker.com/u/library/jenkins/ ,似乎/ var / jenkins_home是一个卷。 你只能在容器运行的时候在那里创build文件,大概是用像这样的卷映射

 docker run ... -v /your/jenkins/home:/var/jenkins_home ... 

docker构build过程对共享卷一无所知。

目前在docker / docker / issues / 3639中进行了调查,并在此评论中进行了总结:

好的,我没做什么研究, 看起来这个卷在Dockerfile指令之间是不可变的
这里更小的Dockerfile进行testing:

 FROM busybox RUN mkdir /tmp/volume RUN echo "hello" > /tmp/volume/hello VOLUME ["/tmp/volume/"] RUN [[ -f /tmp/volume/hello ]] RUN rm /tmp/volume/hello RUN [[ ! -e /tmp/volume/hello ]] 

在每条指令上,我们创build新卷并从原始卷复制内容