zealinux
V2EX  ›  Docker

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

  •  
  •   zealinux · Mar 21, 2023 · 1805 views
    This topic created in 1160 days ago, the information mentioned may be changed or developed.

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

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

    有没有什么最佳实践,

    最好 docker-compose 也能支持

    cosette
        1
    cosette  
       Mar 28, 2023
    compose file 支持 `user` 字段,但是修改挂载的 volume 的 user 可能导致权限错误,无法正常运行。
    yinmin
        2
    yinmin  
       Mar 29, 2023
    最佳实践是容器里都用 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
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2925 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 466ea39e · 48ms · UTC 08:26 · PVG 16:26 · LAX 01:26 · JFK 04:26
    ♥ Do have faith in what you're doing.