2015-03-19 52 views
0

摘要:共享卷组在Docker容器内发生更改,具体取决于主机的哪个用户正在运行该容器。Docker:共享卷组根据主机用户而变化

在我的主机,我有两个用户:userHost1和userHost2

登录身份userHost1我得到Debian的形象和我建立具有以下Dockerfile泊坞窗图像:

FROM debian 

RUN adduser --disabled-password --gecos '' user 

之后,当我用userHost1运行docker并加载共享卷时,我可以在其上写入。但是,如果我用userHost2加载它,我无法写入。

运行搬运工为userHost1:

[email protected]:~$ docker run -t -i -u user -v /home/userHost1/try/:/try/ my_debian 
[email protected]:/$ ls -ahl 
... 
drwxrwxr-x 2 user user 4.0K Mar 19 03:41 try 
... 

但是,如果我登录到主机userHost2:

[email protected]:~$ docker run -t -i -u user -v /home/userHost2/try/:/try/ my_debian 
[email protected]:/$ ls -ahl 
... 
drwxrwxr-x 2 1002 1002 4.0K Mar 19 03:45 try 
... 

[email protected]:/$ touch try/hello 
touch: cannot touch `hello': Permission denied 

这究竟是为什么?我认为主机中的用户与码头集装箱无关。是否因为我将用户主机1拉到Debian镜像?

当然,userHost1是/ home/userHost1/try /的所有者,userHost2是/ home/userHost2/try /的所有者。

回答

1

这只是一个简单的权限问题。请记住容器和主机上的uid相同,但用户名可能不同(因此uid 1002在主机和容器上可能有不同的名称)。

/home/userHost1/try/的拥有者与容器中的用户user具有相同的uid。 /home/userHost2/try/的所有者是uid 1002,这是而不是user中的容器相同,因此user不能写入目录。

+0

太好了,非常感谢你的解释。 有没有处理这个问题的策略/最佳实践? – user1294122 2015-03-20 04:38:02

+1

那么,最简​​单的解决方案是确保你到处都使用相同的uid,即userHost2需要将uid设置为userHost1,可以使用useradd/adduser进行设置。否则,您可以提供选定的gid访问权限并将所有用户添加到该组。 – 2015-03-20 10:22:08