Docker: 共享卷的组根据主机用户而变化
Docker: group of a shared volume changes depending on host user
摘要:docker 容器内的共享卷组发生变化,具体取决于主机的哪个用户正在 运行 连接容器。
在我的主机上我有两个用户:userHost1 和 userHost2
以 userHost1 身份登录,我获取了 debian 映像,并使用以下 Dockerfile 构建了一个 docker 映像:
FROM debian
RUN adduser --disabled-password --gecos '' user
之后,当我 运行 docker 使用 userHost1 并加载共享卷时,我可以在上面写入。但是,如果我用 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 容器无关。是因为我拉取了 userHost1 的 Debian 镜像吗?
当然,userHost1 是 /home/userHost1/try/ 的所有者,userHost2 是 /home/userHost2/try/ 的所有者。
这只是一个简单的权限问题。请记住,容器和主机上的 uid 相同,但用户名可能不同(因此 uid 1002 在主机和容器中的名称可能不同)。
/home/userHost1/try/
的所有者与容器中的用户 user
具有相同的 uid。 /home/userHost2/try/
的owner是uid 1002,与容器中的user
不相同,所以user
无法写入目录。
摘要:docker 容器内的共享卷组发生变化,具体取决于主机的哪个用户正在 运行 连接容器。
在我的主机上我有两个用户:userHost1 和 userHost2
以 userHost1 身份登录,我获取了 debian 映像,并使用以下 Dockerfile 构建了一个 docker 映像:
FROM debian
RUN adduser --disabled-password --gecos '' user
之后,当我 运行 docker 使用 userHost1 并加载共享卷时,我可以在上面写入。但是,如果我用 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 容器无关。是因为我拉取了 userHost1 的 Debian 镜像吗?
当然,userHost1 是 /home/userHost1/try/ 的所有者,userHost2 是 /home/userHost2/try/ 的所有者。
这只是一个简单的权限问题。请记住,容器和主机上的 uid 相同,但用户名可能不同(因此 uid 1002 在主机和容器中的名称可能不同)。
/home/userHost1/try/
的所有者与容器中的用户 user
具有相同的 uid。 /home/userHost2/try/
的owner是uid 1002,与容器中的user
不相同,所以user
无法写入目录。