我有一个Dockerfile如下:
FROM jenkins/jenkins:2.119
USER jenkins
ENV HOME /var/jenkins_home
COPY --chown=jenkins:jenkins ssh ${HOME}/.ssh/
RUN chmod 700 ${HOME}/.ssh && \
chmod 600 ${HOME}/.ssh/*
ssh目录在构建机器上的目录/文件中有755/644。但是,当我用
构建时docker build -t my/temp .
并使用ls命令启动图像
docker run -it --rm my/temp ls -la /var/jenkins_home/.ssh
两个chmod命令都没有应用于图像
drwxr-xr-x 2 jenkins jenkins 4096 May 3 12:46 .
drwxr-xr-x 4 jenkins jenkins 4096 May 3 12:46 ..
-rw-r--r-- 1 jenkins jenkins 391 May 3 11:42 known_hosts
在构建期间,我看到了
Step 4/6 : COPY --chown=jenkins:jenkins ssh ${HOME}/.ssh/
---> 58e0d8242fac
Step 5/6 : RUN chmod 700 ${HOME}/.ssh && chmod 600 ${HOME}/.ssh/*
---> Running in 0c805d4d4252
Removing intermediate container 0c805d4d4252
---> bbfc828ace79
看起来chmod被丢弃了。我该如何阻止这种情况发生?
我在Mac OSX上使用最新的Docker(Edge) 版本18.05.0-ce-rc1-mac63(24246);边缘3b5a9a44cd
修改
使用--rm也不起作用(删除图像和重建后)但没有删除消息
docker build -t my/temp --rm=false .
run -it --rm my/temp ls -la /var/jenkins_home/.ssh
drwxr-xr-x 2 jenkins jenkins 4096 May 3 15:42 .
drwxr-xr-x 4 jenkins jenkins 4096 May 3 15:42 ..
-rw-r--r-- 1 jenkins jenkins 391 May 3 11:42 known_hosts
编辑2
所以基本上是Docker中的一个错误,其中带有VOLUME的基本映像导致chmod失败,同样地,卷上的RUN mkdir失败但COPY失败了,但是使用了错误的权限离开了目录。感谢bkconrad。
编辑3
在此处使用修复程序创建了分叉https://github.com/systematicmethods/jenkins-docker build.sh将在本地构建一个图像
答案 0 :(得分:1)
这与Docker处理图像VOLUME
的方式有关。
来自docker inspect my/temp
:
"Volumes": {
"/var/jenkins_home": {}
},
有一个关于moby项目的有用票据:
https://github.com/moby/moby/issues/12779
基本上,您需要在运行时执行chmod
。
将HOME
envvar设置为非/tmp
的非卷路径会显示预期的行为:
$ docker run -it --rm my/temp ls -la /tmp/.ssh
total 8
drwx------ 2 jenkins jenkins 4096 May 3 17:31 .
drwxrwxrwt 6 root root 4096 May 3 17:31 ..
-rw------- 1 jenkins jenkins 0 May 3 17:24 dummy
答案 1 :(得分:0)
Step 5/6 : RUN chmod 700 ${HOME}/.ssh && chmod 600 ${HOME}/.ssh/*
---> Running in 0c805d4d4252
Removing intermediate container 0c805d4d4252
正如你所看到的那样"中间容器"正在被移除,这是码头工人保持的正常行为,如果你想将这些用途保留在命令之下。
docker build -t my/temp --rm=false .
其中一篇文章也解释过它
Why docker build image from docker file will create container when build exit incorrectly?