Docker运行命令未应用于图像

我有一个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
点赞