当我使用 Alpine 作为基础映像时,如何添加用户?



我正在使用alpine(或基于 Alpine 的图像)作为我的 Dockerfile 中的基本图像。我需要添加哪些说明才能创建用户?

最终,我将使用此用户来运行我将放入容器中的应用程序,以便 root 用户不会运行。

Alpine 使用命令adduseraddgroup来创建用户和组(而不是useraddusergroup)。

FROM alpine:latest
# Create a group and user
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
# Tell docker that all future commands should run as the appuser user
USER appuser

adduser的标志是:

用法: 添加用户 [选项] 用户 [组] 创建新用户,或将用户添加到组 -h 目录 主目录 -g GECOS GECOS领域 -s 外壳 登录外壳 -G GRP集团 -S 创建系统用户 -D 不分配密码 -H 不创建主目录 -u UID 用户标识 -k SKEL 骨架目录 (/etc/skel)

添加新用户官方文档

命令是adduseraddgroup

以下是您可以在busybox环境(alpine)以及基于Debian的环境(Ubuntu等)中使用的Docker模板:

ENV USER=docker
ENV UID=12345
ENV GID=23456
RUN adduser 
--disabled-password 
--gecos "" 
--home "$(pwd)" 
--ingroup "$USER" 
--no-create-home 
--uid "$UID" 
"$USER"

请注意以下几点:

  • --disabled-password阻止提示输入密码
  • --gecos ""规避了
  • 基于 Debian 的系统上"全名"等提示
  • --home "$(pwd)"将用户的主目录设置为 WORKDIR。你可能不想要这个。
  • --no-create-home防止 cruft 从/etc/skel复制到目录中

这些应用程序的用法说明缺少 adduser 和 addgroup 代码中存在的长标志

以下长格式标志应该在 alpine 和 debian-衍生物中都有效:

添加用户

BusyBox v1.28.4 (2018-05-30 10:45:57 UTC) multi-call binary.
Usage: adduser [OPTIONS] USER [GROUP]
Create new user, or add USER to GROUP
--home DIR           Home directory
--gecos GECOS        GECOS field
--shell SHELL        Login shell
--ingroup GRP        Group (by name)
--system             Create a system user
--disabled-password  Don't assign a password
--no-create-home     Don't create home directory
--uid UID            User id

需要注意的一点是,如果未设置--ingroup则分配 GID 以匹配 UID。如果与提供的 UID 对应的 GID 已存在,则添加用户将失败。

添加组

BusyBox v1.28.4 (2018-05-30 10:45:57 UTC) multi-call binary.
Usage: addgroup [-g GID] [-S] [USER] GROUP
Add a group or add a user to a group
--gid GID  Group id
--system   Create a system group

我在尝试编写自己的 fixuid 项目替代方案以将容器作为主机 UID/GID 运行时发现了所有这些。

我的入口点帮助程序脚本可以在 GitHub 上找到。

目的是将该脚本作为第一个参数预置ENTRYPOINT这应该会导致 Docker 从相关的绑定挂载推断 UID 和 GID。

可能需要环境变量"TEMPLATE"来确定应从何处推断权限。

(在撰写本文时,我没有脚本的文档。它仍然在待办事项清单上!!

有包shadow带来useraddusermod

adduser有一些愚蠢的限制:

$ sudo adduser --disabled-password root
adduser: user 'root' in use

usermod不会:

$ sudo apk add shadow
$ sudo usermod --unlock root

相关内容

  • 没有找到相关文章

最新更新