如何确定docker容器创建的文件不属于root

时间:2019-07-27 14:15:54

标签: linux docker permissions docker-compose

因此,我已经阅读了很多有关此问题的文章,但我从未设法解决。

我正在跟踪this tutorial来设置媒体服务器。

问题是,当我将卷安装到主机上不存在的路径时,该目录及其中的所有文件都被创建为根目录。

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

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

问题是...我做了设法在运行HypriotOS的Raspberry Pi 3B上运行完全相同的设置。但是用户在该操作系统上的创建将用户添加到其他组。在这种情况下,所有目录和文件都是在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”,并且组“ docker”。

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

谢谢!

1 个答案:

答案 0 :(得分:0)

不是美杜莎的专家,我看到它允许您传递您希望美杜莎用于创建文件的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

您的树莓派环境文件可能是

UID=1000
GID=1001

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

有关docker的更多信息,请在此处撰写环境变量:https://docs.docker.com/compose/environment-variables/