【问题标题】:How to create and add user with password in alpine Dockerfile?如何在 alpine Dockerfile 中创建和添加带密码的用户?
【发布时间】:2020-08-26 17:24:00
【问题描述】:

以下Dockerfile 在 Ubuntu 上运行良好:

FROM ubuntu:20.04
SHELL ["/bin/bash", "-c"]
ARG user=hakond
ARG home=/home/$user
RUN useradd --create-home -s /bin/bash $user \
        && echo $user:ubuntu | chpasswd \
        && adduser $user sudo

WORKDIR $home
USER $user
COPY --chown=$user entrypoint.sh .
RUN chmod +x entrypoint.sh
ENTRYPOINT ["./entrypoint.sh"]

entrypoint.sh 在哪里

#! /bin/bash
exec bash

如何在 Alpine 中做同样的事情?我试过了:

FROM alpine:3.12
SHELL ["/bin/sh", "-c"]
RUN apk add --no-cache bash
ARG user=hakond
ARG home=/home/$user
RUN addgroup -S docker
RUN adduser \
    --disabled-password \
    --gecos "" \
    --home $home \
    --ingroup docker \
    $user
WORKDIR $home
USER $user
COPY chown=$user entrypoint.sh .
RUN chmod +x entrypoint.sh
ENTRYPOINT ["./entrypoint.sh"]

但这无法构建:

$ docker build -t alpine-user .
Sending build context to Docker daemon   5.12kB
Step 1/12 : FROM alpine:3.12
 ---> a24bb4013296
Step 2/12 : SHELL ["/bin/sh", "-c"]
 ---> Using cache
 ---> ce9a303c96c8
Step 3/12 : RUN apk add --no-cache bash
 ---> Running in e451a2481846
fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/community/x86_64/APKINDEX.tar.gz
(1/4) Installing ncurses-terminfo-base (6.2_p20200523-r0)
(2/4) Installing ncurses-libs (6.2_p20200523-r0)
(3/4) Installing readline (8.0.4-r0)
(4/4) Installing bash (5.0.17-r0)
Executing bash-5.0.17-r0.post-install
Executing busybox-1.31.1-r16.trigger
OK: 8 MiB in 18 packages
Removing intermediate container e451a2481846
 ---> 7b5f7f87bdf6
Step 4/12 : ARG user=hakond
 ---> Running in 846b4b12856e
Removing intermediate container 846b4b12856e
 ---> a0453cb6706e
Step 5/12 : ARG home=/home/$user
 ---> Running in 06550ad3f550
Removing intermediate container 06550ad3f550
 ---> 994d71fb0281
Step 6/12 : RUN addgroup -S docker
 ---> Running in 70aaec6f40e0
Removing intermediate container 70aaec6f40e0
 ---> 5188ed7b234c
Step 7/12 : RUN adduser     --disabled-password     --gecos ""     --home $home     --ingroup docker     $user
 ---> Running in ff36a7f7e99b
Removing intermediate container ff36a7f7e99b
 ---> 97f481916feb
Step 8/12 : WORKDIR $home
 ---> Running in 8d7f0411d6e3
Removing intermediate container 8d7f0411d6e3
 ---> 5de66f4b5d4e
Step 9/12 : USER $user
 ---> Running in ac4abac7c3a8
Removing intermediate container ac4abac7c3a8
 ---> dffd2185df1f
Step 10/12 : COPY chown=$user entrypoint.sh .
COPY failed: stat /var/snap/docker/common/var-lib-docker/tmp/docker-builder615220199/chown=hakond: no such file or directory

【问题讨论】:

  • 您通常根本不这样做。您可以使用docker history 轻松地以明文形式检索密码,并且容器运行的单个进程通常不是登录类型的进程。容器最终要做什么?
  • 我正在尝试模拟一个普通的用户环境(就像不从 docker 运行时一样)。所以用户应该是普通用户(不是root用户)并且有一个主目录和一个密码。当这样设置环境时,我可以在纯环境中测试安装模块,例如用于调试目的..

标签: docker alpine


【解决方案1】:

您成功创建了新用户,您只是在 COPY 命令中写了 chown 而不是 --chown

您的 Dockerfile 应如下所示:

FROM alpine:3.12
SHELL ["/bin/sh", "-c"]
RUN apk add --no-cache bash
ARG user=hakond
ARG home=/home/$user
RUN addgroup -S docker
RUN adduser \
    --disabled-password \
    --gecos "" \
    --home $home \
    --ingroup docker \
    $user
WORKDIR $home
USER $user
COPY --chown=$user entrypoint.sh .
RUN chmod +x entrypoint.sh
ENTRYPOINT ["./entrypoint.sh"]

【讨论】:

    猜你喜欢
    • 2019-12-25
    • 2020-01-26
    • 2015-01-21
    • 1970-01-01
    • 2013-06-30
    • 1970-01-01
    • 2017-09-16
    • 1970-01-01
    相关资源
    最近更新 更多