如何使用用户命名空间在 Docker 容器中切换用户



>我正在运行 dockerd 19.03.1,构建 74b1e89,并在专用 ID 范围内启用用户命名空间

cat > /etc/sub{uid,gid}
dockeruser:120000:10000

我需要将容器从root切换到专用用户,我将其创建为">

ARG USERID=26551
ENV runUID=${USERID}
ARG GROUPID=26551
ENV runGID=${GROUPID}
ARG USERNAME='testuser'
ENV runUSER=${USERNAME}
ARG groupNAME='testgroup'
ENV runGROUP=${groupNAME}
RUN groupadd -g ${runGID}  ${runGROUP} && useradd -u ${runUID} -g ${runGID} -r ${runUSER}  

但是,我无法在容器上下文中切换给用户。su以及作为gosu的替换失败类似于

[root@1d5594cd99a0 /]# su - testuser ls
su: cannot set groups: Invalid argument

根据有关用户命名空间映射的文档,这可能是一个警告,并且会影响依赖于setuid或/和/和诸如对实际二进制所有者进行su检查的所有二进制文件。

是否可以在容器上下文中其他用户下的 Docker 容器中运行命令/二进制文件,并为 dockerd 启用用户命名空间?

回答我的问题

我没有为用户命名空间定义足够的子uid/subgid。

以前

/etc/subuid
/etc/subgid
dockeruser:120000:10000

我在容器中创建了一个 UID=26551 的用户 - 其中 26551 不在 [120000,120000+10000] 内,因此切换到该用户失败。

修复

将 subuid 和 subgid 范围扩展到 [200000,200000+100000] 并实际包括 UID

/etc/subuid
/etc/subgid
dockeruser:200000:100000

相关内容

  • 没有找到相关文章

最新更新