【问题标题】:Docker: group of a shared volume changes depending on host userDocker:共享卷组的变化取决于主机用户
【发布时间】:2015-03-19 04:29:06
【问题描述】:

总结:共享卷的组在 docker 容器内会发生变化,具体取决于主机的哪个用户正在运行容器。

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

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

FROM debian

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

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

以 userHost1 身份运行 docker:

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/ 的所有者。

【问题讨论】:

    标签: permissions docker


    【解决方案1】:

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

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

    【讨论】:

    • 太好了,非常感谢您的解释。是否有任何策略/最佳实践来处理这个问题?
    • 嗯,最简单的解决方案是确保您在任何地方都使用相同的 uid,即 userHost2 需要将 uid 设置为 userHost1,您可以使用 useradd/adduser 进行设置。否则,您可以授予选定的 gid 访问权限并将所有用户添加到该组。
    猜你喜欢
    • 2018-10-09
    • 2018-01-03
    • 2021-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-11
    相关资源
    最近更新 更多