如何在 alpine Dockerfile 中创建并添加带密码的用户?

2023-11-24

下列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"]

where entrypoint.sh is

#! /bin/bash
exec bash

我怎样才能在阿尔卑斯山做同样的事情?我试过:

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

您成功创建了新用户,您刚刚编写了chown代替--chown在你的COPY命令。

您的 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"]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 alpine Dockerfile 中创建并添加带密码的用户? 的相关文章

随机推荐

  • 返回中间变量和直接返回函数调用有区别吗?

    调用函数有什么区别吗return 然后调用该函数return在运行时获取值 如下所示 我的函数原型 int aFunc int int bFunc int 我的第一个 bFunc 返回行 int bFunc int return aFunc
  • Lattix 的开源替代品有哪些?

    我有机会与Lattix在过去 我相信它所代表的范式 分层依赖矩阵 是大规模系统架构管理的未来 然而 我工作的公司总是因为价格标签而望而却步 有人知道存在任何好的开源替代方案吗 经过一番搜索 我似乎找不到一个 这里列出了一些实现Lattix核
  • iPhone UIWebView - 如何设置缩放级别和位置?

    我在 UIWebView 中显示一系列平铺图像 并希望以编程方式设置 UIWebview 的初始缩放和查看位置 如何去做呢 将UIWebView的属性scalesPageToFit设置为YES 然后 网页会缩放以适合用户 并且用户可以放大和
  • 使用 qmake 时是否有可能通过 -isystem 传递包含

    我使用 qmake 作为 makefile 生成器并希望坚持使用它 此外 我想使用 gcc Wall Werror Wundef Wextra 来获得健壮的代码 我正在考虑 迂腐 但那是更进一步的事情 我目前的主要问题是像这样的库生成的大量
  • 访问 .NET 中 VBA 函数的返回值?

    我在 VBA 中有以下代码 位于 Excel 2007 工作簿中 Public Function Multiply a As Double b As Double As Double Multiply a b End Function 如果
  • 如何可靠地从 AttributeSet 获取颜色?

    我想创建一个自定义类 在 Android XML 文件中布局时将颜色作为其属性之一 然而 颜色可以是一种资源 也可以是多种直接颜色规范之一 例如十六进制值 有没有一种简单的首选方法来使用AttributeSet检索颜色 因为表示颜色的整数可
  • 在终端中运行文本文件

    有谁知道是否有办法在 shell 中自动运行命令列表 来自文本文件 我需要运行很多脚本 大约 1000 个 这些脚本采用 python 语言 每个有 2 个参数 dir 和 example 我制作的文本文件看起来像这样 python hom
  • SpringHibernateJpaPersistenceProvider 类未实现请求的接口 PersistenceProvider

    我很困惑 我已经好几年没有使用过 Hibernate 了 然后就再也没有使用过 Spring Boot Spring Boot 但从未与 Hibernate 或 JPA 一起使用 所以我想弄清楚如何让它为我的工作工作 我应该在周一演示一些东
  • F#:重载函数

    我的问题与此有些相关 具有泛型参数类型的函数 但我不太清楚如何做我想做的事 我想定义一个 后代函数 来包装对各种 C 类上 后代 的调用 如下所示 让后代名称 xDocument XDocument xDocument 后代名称 让后代名称
  • 错误 310(net::ERR_TOO_MANY_REDIRECTS):

    我在本地主机上没有收到此错误 只有当我上传到我的服务器时 此错误才会出现在我的页面之一上 知道我需要改变什么吗 我在网络浏览器中遇到了这个错误 其中我访问的网页重定向到另一个网页 该网页无限地重定向回原始页面 我还遇到过编程错误不断重新加载
  • 针对多个快速请求的 .htaccess 或 PHP 保护代码

    我正在寻找如何阻止外部脚本与我的网站连接的想法 我正在寻找谷歌背后同样的想法 就像在一定时间内发出一定数量的请求然后阻止 IP 地址或其他内容一样 我想也许有一个 htaccess 解决方案 如果没有 我会写一个 PHP 解决方案 非常感谢
  • 根据参数的真实类型选择重载方法

    我正在尝试这段代码 interface Callee public void foo Object o public void foo String s public void foo Integer i class CalleeImpl
  • 使用 jQuery 在文本区域中的光标位置创建工具提示

    我正在尝试在文本区域中的输入插入符号上方创建一个工具提示 如果我能够获得文本区域中插入符号的 x y 坐标 这将很容易 但是我已经搜索了一段时间 但不知道如何做到这一点 假设用户正在文本区域中输入内容 然后按某个键 例如 符号 我试图在文本
  • SQLAlchemy 中不区分大小写的字符串列?

    我可以在 sqlalchemy 中创建不区分大小写的字符串列吗 我正在使用 sqlite 并且可能有一种方法可以通过更改排序规则来通过数据库来完成此操作 但我想将其保留在 sqlalchemy python 中 在 SQLAlchemy 0
  • QQ剧情:多于两条数据

    我想画一个类似于这张图的QQ图 我设法使用两个样本获得了 QQ 图 但我不知道如何将第三个样本添加到图中 这是我的结果 这是我使用的代码 qqplot table Bedouin table Tunisia xlim c 0 25 0 25
  • 如何使用 XMLStarlet 将一个元素直接插入到另一个元素之后?

    对于这个 XML 示例
  • PHP 中的 Yield 是什么意思?

    我最近偶然发现了这段代码 function xrange min max for i min i lt max i yield i 我从没见过这个yield之前的关键字 尝试运行我得到的代码 解析错误 语法错误 第 x 行出现意外的 T V
  • TestNG 与 IntelliJ IDEA:如何在 IntelliJ IDEA 9 中使用 testng.xml 文件

    我能够在 IntelliJ 中运行 TestNG 单元测试并在窗口中查看通过 失败输出 这是没有使用任何testng xml文件 我还可以使用 maven 在命令行中运行测试 即mvn clean test Dgroups fast 效果很
  • 我应该将 sqlite 数据库文件写入文档目录还是库/缓存吗?

    我已经阅读了 Apple 的数据存储指南 并且对于应该将我在应用程序中创建的 sqlite 数据库文件保存在哪里感到非常困惑 即使应用程序处于离线模式 我也想读取 sqlite 文件 我读到创建的此类文件应该保存在库 缓存中 并设置 不备份
  • 如何在 alpine Dockerfile 中创建并添加带密码的用户?

    下列Dockerfile在 Ubuntu 上运行良好 FROM ubuntu 20 04 SHELL bin bash c ARG user hakond ARG home home user RUN useradd create home