如何使用dockerfile添加用户?

Atl*_*ic0 33 docker dockerfile

如何添加具有Dockerfile的用户 - 以下操作无效.

USER vault
WORKDIR /usr/local/bin/vault
Run Code Online (Sandbox Code Playgroud)

我的完整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
Run Code Online (Sandbox Code Playgroud)

pl_*_*ock 43

使用useradd而不是其交互式adduser添加用户.

RUN useradd -ms /bin/bash  vault
Run Code Online (Sandbox Code Playgroud)

下面的命令不会创建用户.

USER vault
WORKDIR /usr/local/bin/vault
Run Code Online (Sandbox Code Playgroud)

它会使用vault用户

请参阅Dockerfile用户文档

USER指令设置运行映像时要使用的用户名或UID,以及Dockerfile中跟随它的任何RUN,CMD和ENTRYPOINT指令.

注意:确保这bash是默认shell.

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

RUN ln -sf /bin/bash /bin/sh
RUN useradd -ms /bin/bash  vault
Run Code Online (Sandbox Code Playgroud)

  • 如果你使用alpine你必须用户addgroup和adduser`RUN addgroup -g $ {GROUPID} -S $ {USERNAME}``RUN adduser -S -G $ {USERNAME} -u $ {USERID} -s/bin/bash - h $ {USER_HOME} $ {USERNAME}` (6认同)
  • `useradd`命令不存在于您的基本图像`alpine`中.我不知道这个图像,但这将在ubuntu,centos等图像中运行.我使用`FROM ubuntu:14.04`进行了测试.谷歌关于alpine useradd命令 (3认同)
  • 显示您的 Dockerfile 和“FROM”行 (2认同)

Ren*_*nho 8

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

FROM <base image>
RUN groupadd -g 2000 go \
&& useradd -m -u 2001 -g go go
USER go
Run Code Online (Sandbox Code Playgroud)

或者

RUN addgroup -g 1001 -S appuser && adduser -u 1001 -S appuser  -G appuser 
Run Code Online (Sandbox Code Playgroud)


Gar*_*aro 6

如果您还希望您的用户有密码,请将此用于基于 Alpine 的图像:

FROM alpine
ARG USER=usernameThatYouWant
ARG PASS="some password"
RUN adduser -D $USER && echo "$USER:$PASS" | chpasswd
Run Code Online (Sandbox Code Playgroud)
  • 这些ARG行就在那里,因此您可以(可选)在构建映像时选择另一个用户名和密码(无需更改 Dockerfile)。
  • -D所以adduser还没有设置密码。
    如果没有此选项adduser,将变成交互式并要求输入密码。它不接受来自常规 STDIN 的密码,因此也不能选择通过管道传输密码。
  • echo "$USER:$PASS" | chpasswd最后设置密码。
  • 请注意,我没有使用-s /path/to/some/shellin设置 shell adduser,因为 Alpine 只有ash和sh可用。无论如何,这两者都只是符号链接busybox。
    (但是如果您要在映像中安装另一个 shell,您可能确实想使用它。)

对于基于 Ubuntu 的映像,请使用以下命令:

FROM ubuntu
ARG USER=usernameThatYouWant
ARG PASS="some password"
RUN useradd -m -s /bin/bash $USER && echo "$USER:$PASS" | chpasswd
Run Code Online (Sandbox Code Playgroud)

我在用:

  • useradd因为这里这是非交互式使用的程序。
  • -m这样我们用户就有了一个 homedir。
  • -s /bin/bash以便用户将 bash 作为默认 shell。

(对于大多数其他基础映像,您还需要使用 Ubuntu-method )