useradd 不在 amazonlinux 基础映像中

useradd not in amazonlinux base image

似乎 useradd 不在 amazonlinux docker 基本映像中。

useradd 将在我的 Dockerfile 安装 openldap-devel 时工作,因此 RUN useradd my_user 将在我的图像具有以下内容时工作:

FROM amazonlinux

RUN yum -y install python3 \
    gcc \
    python3-pip \
    python3-devel \
    openldap-devel

当我的图像刚从

构建时
FROM amazonlinux

RUN yum -y install python3 \
    gcc \
    python3-pip \
    python3-devel 

命令 RUN useradd my_user 失败并显示错误消息 /bin/sh: useradd: command not found

如何在 amazonlinux 基础映像中安装 useradd 而无需安装所有 openldap-devel

我设法通过 运行 在 AmazonLinux EC2 机器上执行以下命令找出包 useradd 所属的包:

$ yum whatprovides /usr/sbin/useradd

2:shadow-utils-4.1.5.1-24.amzn2.x86_64 : Utilities for managing accounts and shadow password files
Repo        : amzn2-core
Matched from:
Filename    : /usr/sbin/useradd

因此将我的 Dockerfile 更改为以下内容使其工作:

FROM amazonlinux

RUN yum -y install python3 \
    python3-pip \
    shadow-utils

您可以使用 shadow-utils 包,正如 demeter 所指出的那样。

在我的例子中,安装 shadow-utils 花了太长时间来创建我的 docker 图像,因为它安装了很多依赖项。所以我会给你两个选择:

1 - 使用 docker USER 命令:

您可以在 Dockerfile 中执行此操作:

FROM amazoncorretto:11.0.14-al2
USER 1000

这将允许您使用 non-root 用户启动容器。从here可以看出,不需要用户存在。缺点是这个用户没有名字,也没有 $HOME。我认为这通常是可以的,但是如果容器中有任何软件需要 $HOME 文件夹,它可能会带来一些问题。

2 - 使用现有用户:

在容器中,如果您 运行 cat /etc/passwd 您将看到现有用户的列表。通常,您将拥有权限最少的 nobody 用户。所以在你的 Dockerfile 中你可以这样做:

FROM amazoncorretto:11.0.14-al2
USER nobody

你很好