Docker:共享卷的组根据主机用户而变化

时间:2015-03-19 04:29:06

标签: permissions docker

摘要:共享卷的组在docker容器中发生更改,具体取决于主机的哪个用户正在运行容器。

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

以userHost1身份登录我得到了debian图像,并使用以下Dockerfile构建了一个docker镜像:

FROM debian

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

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

将docker作为userHost1运行:

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

但是如果我以userHost2:

登录主机
userHost2@host:~$ docker run -t -i -u user -v /home/userHost2/try/:/try/ my_debian
user@eb169acd52b4:/$ ls -ahl
...
drwxrwxr-x   2 1002 1002 4.0K Mar 19 03:45 try
...

user@eb169acd52b4:/$ touch try/hello
touch: cannot touch `hello': Permission denied

为什么会这样?我认为主机中的用户与docker容器无关。是因为我将Debian图像拉为userHost1?

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

1 个答案:

答案 0 :(得分:1)

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

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