发现运行 Docker 运行镜像,创建的目录的所属 user 有点混乱,不统一

2023-03-21 11:48:13 +08:00
 zealinux

比如有些镜像创建的文件用户是 root ,有些是 docker ,还有一些居然是 1001 ,还有其他什么。

能不能只用我当前的宿主机器上运行 docker 命令的 user ?

有没有什么最佳实践,

最好 docker-compose 也能支持

1139 次点击
所在节点    Docker
2 条回复
cosette
2023-03-28 00:42:46 +08:00
compose file 支持 `user` 字段,但是修改挂载的 volume 的 user 可能导致权限错误,无法正常运行。
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

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/925794

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX