我正在尝试在我的 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 /myapplication
从useradd
命令中删除所有内容,那么我还需要设置什么才能传递--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'
我不知道您想做什么,所以我无法告诉您这两种解决方案哪一种是正确的。