【问题标题】:How to add user with dockerfile?如何使用 dockerfile 添加用户?
【发布时间】:2017-02-12 19:07:38
【问题描述】:

如何使用 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

【问题讨论】:

    标签: docker dockerfile


    【解决方案1】:

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

    RUN useradd -ms /bin/bash  vault
    

    以下命令不会创建用户。

    USER vault
    WORKDIR /usr/local/bin/vault
    

    它将使用vault用户

    请参考Dockerfile User Documentation

    USER 指令设置运行时使用的用户名或 UID 图像以及其后的任何 RUN、CMD 和 ENTRYPOINT 指令 在 Dockerfile 中。

    注意:确保bash 是默认shell。

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

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

    【讨论】:

    • 显示你的 Dockerfile,以及FROM这一行
    • 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
    • 试试我回答的最后一部分
    • useradd 命令在您的基本映像 alpine 中不存在。我不知道这个图像,但这将在 ubuntu、centos 等图像中运行。我使用 FROM ubuntu:14.04 进行了测试。 google一下alpine useradd命令
    • 如果你使用 alpine 你必须用户 addgroup 和 adduser RUN addgroup -g ${GROUPID} -S ${USERNAME} RUN adduser -S -G ${USERNAME} -u ${USERID} -s /bin/bash -h ${USER_HOME} ${USERNAME}
    【解决方案2】:

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

    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 
    

    【讨论】:

    • 当我按照这些步骤使用 selenium docker 镜像作为基础镜像时,构建成功,但是当我运行我的镜像时,它显示 groupadd: GID 2000 已经存在。我尝试了不同的 ID,但同样的错误仍然存​​在。有什么办法可以解决这个问题吗?谢谢
    • 你使用的 selenium docker 镜像是什么?
    • elgalu/硒:最新
    • 嗨,Amith,我无法重现此错误!只是为了测试,试试 centos:7 图像。您将看到这些步骤运行良好。当我输入 elgalu/selenium:latest 时,我收到消息“groupadd:权限被拒绝。groupadd:无法锁定 /etc/group;稍后再试。”发生这种情况是因为只有 root 用户能够创建新用户
    • 如果group和name不一样会更好,这样可以轻松读取useradd命令的签名
    【解决方案3】:

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

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

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

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

    我正在使用:

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

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

    【讨论】:

      猜你喜欢
      • 2022-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-13
      • 1970-01-01
      • 2020-04-02
      • 2016-10-14
      相关资源
      最近更新 更多