【问题标题】:How do I make sure that files created by docker container are not owned by root如何确保由 docker 容器创建的文件不属于 root
【发布时间】:2019-12-05 13:27:48
【问题描述】:

所以,我已经阅读了很多关于这个问题的帖子,但我从未设法解决它。

我正在关注this tutorial 设置媒体服务器。

问题是,当我将卷挂载到主机上不存在的路径时,目录和其中的所有文件都以 root 身份创建。

我已按照安装后说明进行操作:

sudo usermod -aG docker $USER

这是我的 docker-compose 示例:

medusa:
  image: linuxserver/medusa
  container_name: medusa
  environment:
    - PUID=1000
    - PGID=1000
    - TZ=${TZ}
  volumes:
    - /home/myuser-ubuntu/docker/medusa/config:/config
    - /home/myuser-ubuntu/media:/data
ports:
- 8081:8081
restart: unless-stopped

在 Ubuntu Server 18.04 上运行,当我以安装 Ubuntu 时创建的默认用户 (myuser-ubuntu) 身份登录时,使用“id”命令看到此结果:

uid=1000(myuser-ubuntu) gid=1000(myuser-ubuntu) groups=1000(myuser-ubuntu),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),108(lxd),1001(docker)

此用户属于以下组:

myuser-ubuntu : myuser-ubuntu adm cdrom sudo dip plugdev lxd docker

问题是...我确实设法在 Raspberry Pi 3B 上运行了完全相同的设置,运行 HypriotOS。但是该操作系统上的用户创建将用户添加到不同的组。在这种情况下,所有目录和文件都是在 myuser-pi 用户和 myuser-pi 组下创建的。 (这是我想要的)

以下是“myuser-pi”所在的组:

myuser-pi : myuser-pi video users docker

以及 HypriotOS 上“id”命令的输出

uid=1000(myuser-pi) gid=1000(myuser-pi) groups=1000(myuser-pi),44(video),100(users),999(docker)

所以,我怀疑 myuser-pi 不属于像“myuser-ubuntu”这样的“sudo”组这一事实与设置的差异有关。

现在,如果我在启动容器之前创建所有目录和子目录,在其中创建的文件不属于 root,而是属于“myuser-ubuntu”和组“码头工人”。

关于如何在 Ubuntu 上完成与在 HypriotOS 上相同的事情有什么想法吗?

谢谢!

【问题讨论】:

    标签: linux docker permissions docker-compose


    【解决方案1】:

    不是 medusa 方面的专家,我发现它允许您传递希望 medusa 用来创建文件的 UID 和 GID。 对于不同操作系统上的不同安装,这些值可能不同(因为 Raspbian 和 Ubuntu 不同)。我建议为每个安装创建一个包含 GID 和 UID 值的 docker compose .env 文件,并将您的 compose 文件定义为

    medusa:
      image: linuxserver/medusa
      container_name: medusa
      environment:
        - PUID=${UID}
        - PGID=${GID}
        - TZ=${TZ}
      volumes:
        - /home/myuser-ubuntu/docker/medusa/config:/config
        - /home/myuser-ubuntu/media:/data
    ports:
    - 8081:8081
    restart: unless-stopped
    

    您在覆盆子中的 env 文件可能是

    UID=1000
    GID=1001
    

    您的 ubuntu 安装可能有不同的值。

    更多关于 docker compose 环境变量的信息在这里:https://docs.docker.com/compose/environment-variables/

    【讨论】:

    • 感谢@Jimmy,但正如我原来的帖子中id 命令的输出所示,我确实使用了正确的ID。我确实使用了环境变量,为简单起见在我的问题中省略了。当文件夹已经存在时,将使用正确的 UID 和 GID 创建文件。问题是容器何时需要创建文件夹和子文件夹。然后文件夹归根用户所有,其中的文件也是如此。
    • @HannonCésar 那么你做的一切都是对的,你应该尝试在他们的 Github 中寻求支持 github.com/linuxserver/docker-medusa/issues
    猜你喜欢
    • 1970-01-01
    • 2021-10-10
    • 2017-01-20
    • 1970-01-01
    • 1970-01-01
    • 2018-10-23
    • 2017-03-22
    • 2020-05-23
    • 2023-03-04
    相关资源
    最近更新 更多