我有一个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将在本地构建一个图像
最佳答案 这与Docker如何处理图像的VOLUME有关.
从docker检查我的/ 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