比如有些镜像创建的文件用户是 root ,有些是 docker ,还有一些居然是 1001 ,还有其他什么。
能不能只用我当前的宿主机器上运行 docker 命令的 user ?
有没有什么最佳实践,
最好 docker-compose 也能支持
1
cosette 2023-03-28 00:42:46 +08:00
compose file 支持 `user` 字段,但是修改挂载的 volume 的 user 可能导致权限错误,无法正常运行。
|
2
yinmin 2023-03-29 20:49:14 +08:00
最佳实践是容器里都用 root 。Docker 会限制容器不越界的。
当然,由于某种原因,容器里不用 root ,而是用特定 user ,你要先了解 linux 文件权限的底层逻辑 uid 和 gid 。 文件 /目录的权限是保存 uid(用户编号)、gid(组编号),然后查询 linux 的用户对应表、组对应表显示用户名和组名的。 例如:宿主机器里 docker 用户的 uid=1001 、gid=1001 ;容器里 containeruser 用户的 uid=1001 、gid=1001 。在容器里使用 containeruser 生成文件,文件权限标记为 uid=1001 、gid=1001 ,你在宿主机器里看到这个文件的所有者就是 docker:docker 理解这个底层逻辑后,你就可以配置特定用户了。 先在宿主机器用命令查询 docker 用户的 uid 和 gid: id docker 在容器的 Dockerfile 里,根据 uid 和 gid 创建用户 /组,然后用这个用户去操作文件即可。Dockerfile 的指令是: RUN groupadd --gid <gid> containeruser \ && useradd --uid <uid> -g containeruser --create-home containeruser USER containeruser |