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

时间:2018-04-21 11:04:24

标签: docker alpine

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

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

3 个答案:

答案 0 :(得分:71)

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的标志是:

Usage: adduser [OPTIONS] USER [GROUP]

Create new user, or add USER to GROUP

        -h DIR          Home directory
        -g GECOS        GECOS field
        -s SHELL        Login shell
        -G GRP          Group
        -S              Create a system user
        -D              Don't assign a password
        -H              Don't create home directory
        -u UID          User id
        -k SKEL         Skeleton directory (/etc/skel)

答案 1 :(得分:9)

命令为adduseraddgroup

这是Docker的模板,可以在busybox环境(高山)以及基于Debian的环境(Ubuntu等)中使用:

ENV USER=docker
ENV UID=12345
ENV GID=23456

RUN addgroup --gid "$GID" "$USER" \
    && 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复制到目录中

这些应用程序的使用说明是缺少adduseraddgroup的代码中出现的长标志

以下长格式标志在高山以及debian衍生物中均应起作用:

adduser

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已经存在,则adduser将失败。

添加组

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运行时,我发现了所有这些内容。

My entrypoint helper script可在GitHub上找到。

目的是将该脚本作为ENTRYPOINT的第一个参数添加,这将导致Docker从相关的绑定安装中推断UID和GID。

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

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

答案 2 :(得分:0)

有一个包 shadow 带来了 useraddusermod

adduser 有一些愚蠢的限制:

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

usermod不是:

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