我刚刚开始使用 Docker 和 Portainer。
我使用 portainer 创建了一个堆栈,并通过相同的 docker-compose 为不同的应用程序添加了持久卷。
我的问题是,当编辑并保存在这些卷中创建的文件(例如 Nginx 配置)时,我收到“权限被拒绝”的提示,无法写入该文件。
当我进入文件夹并输入内容ls -l
以检查所有权时,我发现 portainer 使用的每个文件夹都归 root 用户所有。
这是正常行为吗?我是否缺少 portainer 下的配置,或者我应该将这些卷的所有权更改为我的用户?
注意:我使用的是 portainer 1.23.1、docker 19.03.2 和 ubuntu 19.10。这是一个个人家庭实验室项目,但我也想知道它在生产中的表现如何。
答案1
在使用 docker 和 docker compose 几年后,我收到通知说这个问题仍然有效
此问题是由于 docker 默认使用 root 用户来运行容器(除非容器已经有指定的用户)。
--user=""
为了防止出现此问题,应使用标志(或user: ""
在 docker compose 中)并指定 uid,以与操作系统上相同的用户身份运行容器
前任:
services:
mycontainer:
image: myimage:latest
user: "1000"
要获取用户 uid,只需运行命令id $USER