我在Dockerfile中使用<code>alpine</code>(或基于alpine的图像)作为基础图像。创建用户需要添加哪些指令?
最终,我将使用此用户来运行我将放入容器中的应用程序,以便 root 用户不会这样做。
有带来用户添加的
包阴影
adduser
有一些愚蠢的限制:
$ sudo adduser --disabled-password root
adduser: user 'root' in use
但是< code>usermod不是:
$ sudo apk add shadow
$ sudo usermod --unlock root
命令是adduser
和addgroup
。
这是一个Docker模板,您可以在busybox环境(高山)以及基于Debian的环境(Ubuntu等)中使用:
ENV USER=docker
ENV UID=12345
ENV GID=23456
RUN adduser \
--disabled-password \
--gecos "" \
--home "$(pwd)" \
--ingroup "$USER" \
--no-create-home \
--uid "$UID" \
"$USER"
请注意以下几点:
--disable-password
阻止提示输入密码--gecos""
在基于Debian的系统上规避了“全名”等提示--home"$(pwd)"
将用户的home设置为WORKDIR。您可能不想要这个。--no-create-home
防止cruft从/etc/skel
这些应用程序的用法说明缺少adduser和addgroup代码中的长标志。
以下长格式标志应该既适用于alpine,也适用于debian衍生产品:
BusyBox v1.28.4 (2018-05-30 10:45:57 UTC) multi-call binary.
Usage: adduser [OPTIONS] USER [GROUP]
Create new user, or add USER to GROUP
--home DIR Home directory
--gecos GECOS GECOS field
--shell SHELL Login shell
--ingroup GRP Group (by name)
--system Create a system user
--disabled-password Don't assign a password
--no-create-home Don't create home directory
--uid UID User id
需要注意的一点是,如果没有设置< code> - ingroup,那么GID将被分配来匹配UID。如果与提供的UID对应的GID已经存在,adduser将失败。
BusyBox v1.28.4 (2018-05-30 10:45:57 UTC) multi-call binary.
Usage: addgroup [-g GID] [-S] [USER] GROUP
Add a group or add a user to a group
--gid GID Group id
--system Create a system group
我在尝试编写自己的fixuid项目的替代方案时发现了所有这一切,该项目将容器作为主机UID/GID运行。
我的入口点助手脚本可以在GitHub上找到。
其目的是将该脚本作为第一个参数附加到入口点
,这应该会导致 Docker 从相关的绑定装载中推断 UID 和 GID。
可能需要一个环境变量“TEMPLATE”来确定应该从哪里推断权限。
(在写作时,我没有为我的脚本留档。它仍然在待办事项列表上!!)
Alpine使用命令adduser
和addgroup
来创建用户和组(而不是useradd
和usergroup
)。
FROM alpine:latest
# Create a group and user
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
# Tell docker that all future commands should run as the appuser user
USER appuser
<code>adduser</code>的标志为:
Usage: adduser [OPTIONS] USER [GROUP] Create new user, or add USER to GROUP -h DIR Home directory -g GECOS GECOS field -s SHELL Login shell -G GRP Group -S Create a system user -D Don't assign a password -H Don't create home directory -u UID User id -k SKEL Skeleton directory (/etc/skel)
添加新用户官方文档
问题内容: 我正在处理dockerfile。我只是意识到我一直在使用索引图像。 所以我想知道: 如何在我的本地(自定义)图像之一不作为索引的情况下将其用作基础()图像? 问题答案: 您可以使用它而无需执行任何特殊操作。如果您有一个本地图像,可以这样做。如果您在Dockerfile中进行操作,但 没有 名为的本地映像, 则 Docker将尝试从注册表中提取它。 换句话说,如果Dockerfile这样
正如你在下面的代码片段中看到的,我很难让蓝色覆盖贴在图像上,但是正如你所看到的,在左侧,由于某种原因,它没有贴在图片上。是的,我希望一整列的位置比另一列低/高一点,所以这里我尝试将整列1定位70px,但它撕裂了蓝色覆盖层和图像。有什么想法吗? null null
我试图创建一个小行星游戏,但我已经在一开始就很挣扎了:我想在游戏开始前创建一个倒计时。为了做到这一点,我使用了一个计时器,当按下按钮“开始”时开始,它(应该)每秒钟加载一个,然后显示在一个上。 在我加上计时器之前,整个程序运行得很好。然而,图像仍在绘制中,的方法仍在完全使用。但是,图像不会出现在我的上。 有人能发现错误吗?我真的不明白问题是什么,虽然我对计时器不熟悉,所以如果我做的事情真的很愚蠢,
我从openjdk:8-jdk-alpine创建了一个docker映像,但当我尝试执行简单命令时,会出现以下错误:
问题内容: 我从openjdk:8-jdk-alpine创建了一个docker镜像,但是当我尝试执行简单的命令时出现以下错误: 问题答案: 默认情况下,高山docker映像未安装bash。您将需要添加以下命令来获取: 如果您使用,那么您可以 保持docker映像大小较小。(感谢@sprkysnrky的评论)
问题内容: 我有一个网站,用户可以在其中上传图片… 上传图像后,我需要在图像上添加徽标(水印)。 我该怎么办? 而且重要的一点是,水印必须位于可以看到的角落,例如,我看到的网站会即时生成水印,并将水印放置在主图像的背景为“相同颜色”的任何位置,因此如果您明白我的意思,水印就会伸出来。 有人对此有很好的教程或文章吗?还是知道在php中需要找到水印位置的任何函数? 问题答案: :