useradd 使用 --root 参数时找不到现有组

useradd 使用 --root 参数时找不到现有组

我正在尝试在我的 Docker 镜像中创建新用户:

FROM openjdk:8u252-jre-buster

WORKDIR /myapplication

RUN groupadd -r -g 1000 agroup
RUN echo $?
RUN getent group agroup
RUN su -c 'useradd --system --shell /sbin/nologin --uid 1000 --gid agroup appuser --root /myapplication'
RUN echo $?
RUN chown 1000:1000 -cR /myapplication
RUN echo $?
USER 1000

这将引发错误:

useradd:组“agroup”不存在

命令 '/bin/sh -c su -c 'useradd --system --shell /sbin/nologin --uid 1000 --gid agroup appuser --root /myapplication'' 返回非零代码:6

如果我--root /myapplicationuseradd命令中删除所有内容,那么我还需要设置什么才能传递--root参数?

所提供的示例运行docker build .会产生引用的输出。

答案1

第一个命令在非 chroot 环境中创建一个组 ( /etc/group),而 useradd 命令在 chroot 环境中创建一个用户 ( /myapplication)。一般来说,如果不是因为您试图从第一个命令将用户添加到组中,但在 chroot 环境中不存在该用户,那么这不会是一个问题。

这个问题有两个可能的解决方案。要么在 chroot 环境中创建组:

groupadd -r -g 1000 agroup --root /myapplication

或者在 chroot 环境之外创建用户:

su -c 'useradd --system --shell /sbin/nologin --uid 1000 --gid agroup appuser'

我不知道您想做什么,所以我无法告诉您这两种解决方案哪一种是正确的。

相关内容