You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Red Hat UBI 8 Minimal中复现Dockerfile用户权限配置

UBI 8 Minimal 镜像创建非root用户实现方案

UBI 8 Minimal默认未携带groupadd/useradd所属的shadow-utils组件,使用microdnf作为默认包管理器,原有标准UBI上的用户创建逻辑可通过以下两种方案复现:

方案1:安装工具完成配置后清理(与原有逻辑完全兼容)

该方案和你原有Dockerfile的配置逻辑完全对齐,不会出现行为差异,工具用完后直接卸载并清理缓存,几乎不会增加镜像体积。
对应的Dockerfile配置段如下:

RUN microdnf install -y --setopt=install_weak_deps=false shadow-utils \
  && groupadd -r -g 1000 myuser \
  && useradd -r -u 1000 -g myuser -m -d /opt/myuser -s /bin/bash myuser \
  && microdnf remove -y shadow-utils \
  && microdnf clean all \
  && rm -rf /var/cache/dnf

RUN mkdir /deployments \
  && chmod 755 /deployments \
  && chown -R myuser /deployments

配置说明:

  • 加--setopt=install_weak_deps=false参数避免安装不必要的弱依赖,进一步控制体积
  • 如果后续构建流程还需要用到用户管理相关命令,可以跳过卸载shadow-utils的步骤

方案2:直接写入系统配置文件(零额外依赖,体积最小)

Linux系统的用户、用户组配置本质是存储在/etc/passwd、/etc/group、/etc/shadow三个文本文件中,无需依赖专用命令,直接写入对应配置即可实现完全相同的效果,不需要安装任何额外包。
对应的Dockerfile配置段如下:

RUN echo "myuser:x:1000:" >> /etc/group \
  && echo "myuser:x:1000:1000::/opt/myuser:/bin/bash" >> /etc/passwd \
  && echo "myuser:!!:19930:0:99999:7:::" >> /etc/shadow \
  && mkdir -p /opt/myuser /deployments \
  && chmod 755 /deployments \
  && chown -R 1000:1000 /opt/myuser /deployments

配置说明:

  • /etc/group写入的条目对应GID为1000的myuser用户组,和原配置一致
  • /etc/passwd写入的条目对应UID为1000、家目录为/opt/myuser、默认shell为/bin/bash的系统用户,完全匹配原useradd命令的参数
  • /etc/shadow写入的条目默认锁定用户密码,和useradd -r创建的系统用户默认行为一致
  • 授权时直接使用UID/GID数值,不依赖用户名解析,兼容性更好

方案选择参考

  • 优先选方案1:和原有配置逻辑完全一致,排查问题成本低,适合绝大多数场景
  • 选方案2:追求极致镜像体积,且明确不需要后续修改用户配置的场景

补充说明:不管是标准UBI8还是UBI8 Minimal,镜像默认运行用户都是root,不存在默认rootless的配置。rootless容器指的是容器运行时层面不需要宿主机root权限即可启动容器,和镜像内默认用户无关。如果需要容器默认以myuser身份启动,在Dockerfile末尾添加USER myuser即可。

内容的提问来源于stack exchange,提问作者Richie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 09:24:20