在Dockerfile中,要注意ADD和chown/chmod的顺序

首先

我认为这是一个错误(我认为这是规格上的一个问题),
在编写Dockerfile时,ADD指令与chown或chmod指令的顺序可能导致意外行为,因此与大家分享一下。

请用中文重述以下内容,只需要提供一种版本:

动作版本

    • docker

Docker version 0.8.0, build cc3a8c8d8ec57e15b7b7316797132d770408ab1a

docker host os (Mac)

boot2docker: 0.5.4

当前情况

例如,对于CentOS用户而言,他们可能希望在.ssh目录中放置authorized_keys文件,并进行权限等设置。在这种情况下,至少需要满足以下条件:

    • ~/.ssh DIR は mode 700 でなくてはならない

 

    ~/.ssh DIR 以下の Owner は centosユーザでなくてはならない

假设将其以以下方式写成。

RUN mkdir -p /home/centos/.ssh
RUN chmod 700 /home/centos/.ssh
ADD centos.pub /home/centos/.ssh/authorized_keys
RUN chown centos:centos -R /home/centos

然后,Dockerfile的构建本身是成功的,但是当尝试登录到该镜像并访问.ssh目录时,

# su - centos
% cd .ssh
cd: 許可がありません: .ssh

在中文中的表达为:

虽然所有者和权限都符合预期,但无论尝试多少次都会出现相同的现象。

另外,

% sudo mv .ssh a
% mv a .ssh
% cd .ssh

如果这样的话,那么这次就可以好好解决了。很明显,情况非同寻常。

解決方法

https://github.com/dotcloud/docker/issues/1295
在这里也有些写着,但是改变顺序后问题得到修复。

RUN mkdir -p /home/centos/.ssh
ADD centos.pub /home/centos/.ssh/authorized_keys
RUN chown centos:centos -R /home/centos
RUN chmod 700 /home/centos/.ssh

看来与ADD的顺序很重要。

为什么呢,虽然心情有些沮丧,但是好在问题解决了。请大家也要注意安全。

广告
将在 10 秒后关闭
bannerAds