Dockerfile 中使用 ADD/chown/chmod 创建的容器无法访问自己的目录

4
我尝试将ssh私钥添加到Dockerfile中进行构建,但奇怪的是,即使看起来我有完全的权限,我仍然无法访问它。
Docker Version: 1.0.0
Docker host: ubuntu 14.04

这里是 Dockerfile 文件。
FROM ubuntu:latest

ENV HOME /home/larry

RUN useradd larry && echo 'larry:docker' | chpasswd
RUN echo "larry ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers

# arrange ssh key
ADD larry.id_rsa $HOME/.ssh/id_rsa

RUN \
    chmod 700 $HOME/.ssh &&\
    chmod 600 $HOME/.ssh/id_rsa 

RUN chown -R larry:larry $HOME

我构建了镜像并进入容器,然后切换到用户larry,结果如下:

$ id
uid=1000(larry) gid=1000(larry) groups=1000(larry)
$ ls -al
total 12
drwxr-xr-x 5 larry larry 4096 Jun 21 01:29 .
drwxr-xr-x 5 root  root  4096 Jun 21 01:29 ..
drwx------ 2 larry larry 4096 Jun 21 01:29 .ssh
$ cd .ssh
-su: cd: .ssh: Permission denied   

也许我错过了一些关于Docker的基本概念?从普通Unix用户的角度来看有点奇怪。我也在Github上发布了这个问题: https://github.com/dotcloud/docker/issues/1295#issuecomment-46700769
1个回答

8
您刚遇到了错误 #6047,基本上意味着在运行chmod后执行chown存在问题。
以下Dockerfile可以正常工作:
FROM ubuntu:latest

ENV HOME /home/larry

RUN useradd larry && echo 'larry:docker' | chpasswd
RUN echo "larry ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers

# arrange ssh key
ADD larry.id_rsa $HOME/.ssh/id_rsa

RUN chown -R larry:larry $HOME
RUN \
    chmod 700 $HOME/.ssh &&\
    chmod 600 $HOME/.ssh/id_rsa

非常感谢您提供的错误链接,我也注意到了解决方法,只是想更多地了解为什么会出现这种情况以及为什么在容器内看起来正确,这是否是aufs的问题?我遇到过其他类似的权限问题,最好能够了解更多细节。您能否提供更多技术信息? - Larry Cai
抱歉,我不知道这个问题的具体原因。 - Thomasleveil
好的,足够好了。等一会儿看看其他人是否可以发表更多评论。 - Larry Cai
可能是AUFS的bug。谢谢。我一直在想,即使有15年的经验,我对Linux还不够了解。谢谢。 - Thales Ceolin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接