在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的顺序很重要。
为什么呢,虽然心情有些沮丧,但是好在问题解决了。请大家也要注意安全。