V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zealinux
V2EX  ›  Docker

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

  •  
  •   zealinux · 2023-03-21 11:48:13 +08:00 · 1145 次点击
    这是一个创建于 616 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    有没有什么最佳实践,

    最好 docker-compose 也能支持

    cosette
        1
    cosette  
       2023-03-28 00:42:46 +08:00
    compose file 支持 `user` 字段,但是修改挂载的 volume 的 user 可能导致权限错误,无法正常运行。
    yinmin
        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
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1829 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 16:39 · PVG 00:39 · LAX 08:39 · JFK 11:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.