如何添加用户与 dockerfile?

如何使用 Dockerfile 添加用户-以下方法不起作用。

USER vault
WORKDIR /usr/local/bin/vault

我完整的 Dockerfile:

FROM alpine:3.4
RUN apk update && apk add curl unzip
RUN useradd -ms /bin/bash vault


USER vault
WORKDIR /usr/local/bin/vault
ADD /vault.hcl /etc/vault/vault.hcl


RUN curl -SL https://releases.hashicorp.com/vault/0.5.0/vault_0.5.0_linux_amd64.zip > vault.zip
RUN unzip vault.zip -d /usr/local/bin && rm vault.zip
139266 次浏览

使用 useradd而不是它的交互式 adduser来添加用户。

RUN useradd -ms /bin/bash  vault

下面的命令将不会创建用户。

USER vault
WORKDIR /usr/local/bin/vault

它将使用 vault用户

请参阅 Dockerfile 用户文档

方法时使用的用户名或 UID 图像和任何运行,CMD 和 ENTRYPOINT 指令,跟随它 在 Dockerfile 里。

注意: 确保 bash是默认 shell。

如果默认 shell 是 /bin/sh,你可以这样做:

RUN ln -sf /bin/bash /bin/sh
RUN useradd -ms /bin/bash  vault

若要添加组并关联新用户,请使用下面的代码。

FROM <base image>
RUN groupadd -g 2000 go \
&& useradd -m -u 2001 -g go go
USER go

或者

RUN addgroup -g 1001 -S appuser && adduser -u 1001 -S appuser  -G appuser

如果你还希望你的用户有一个密码,使用阿尔卑斯为基础的图片:

FROM alpine
ARG USER=usernameThatYouWant
ARG PASS="some password"
RUN adduser -D $USER && echo "$USER:$PASS" | chpasswd
  • 这里有 ARG行,所以您可以(可选地)在构建映像时选择另一个用户名和密码(不必更改 Dockerfile)。
  • -D,这样 adduser还不能设置密码。如果没有这个选项,adduser将变成交互式的,并且要求输入密码。它不接受来自常规 STDIN 的这个选项,因此管道密码也不是一个选项。
  • 最后设置密码。
  • 请注意,我没有在 adduser中设置带有 -s /path/to/some/shell的 shell,因为 Alpine 只有 ashsh可用。这两个都只是到 busybox的符号链接。< br > < em > (但是如果您要在您的映像中安装另一个 shell,那么您可能确实需要使用它。)

对于基于 Ubuntu 的图像,使用以下方法:

FROM ubuntu
ARG USER=usernameThatYouWant
ARG PASS="some password"
RUN useradd -m -s /bin/bash $USER && echo "$USER:$PASS" | chpasswd

我使用:

  • 因为这是一个非交互式使用的程序。
  • 使我们的用户有一个家庭目录。
  • -s /bin/bash,以便用户将 bash 作为默认 shell。

(对于大多数其他的基础映像,你也需要使用 Ubuntu 方法)