gpt4 book ai didi

linux - 在 Dockerfile 中使用 useradd

转载 作者:太空宇宙 更新时间:2023-11-04 05:09:10 26 4
gpt4 key购买 nike

在 Dockerfile 中找到 RUN useradd ... 命令时会发生什么?该用户是在哪里创建的?它在哪里生活?是否添加到内核管理的UID池中?当构建上下文容器退出时会发生什么?

最佳答案

Linux 中的“用户”是一个数字用户 ID,加上到 /etc/passwd 中某些特定用户名和其他属性的映射(可选)。不存在“uid 池”这样的东西;如果我现在碰巧拥有用户 ID 12345,那么文件系统所有权检查之类的操作会进行数字比较,这就是结束。

因此,如果 Dockerfile 执行 RUN useradd,它会运行 useradd 命令,该命令(除其他外)会向镜像文件系统空间内的 /etc/passwd 添加一个条目。 Docker 知道在镜像的/etc/passwd 文件中查找 Dockerfile USER 指令或 docker run -u 选项。 (但您也可以在那里使用数字 uid。)

取决于主机操作系统和 Docker daemon configuration ,如果您使用 docker run -v 选项将主机目录映射到容器中,则容器进程必须以 root 身份运行,或者使用与目录所有者相同的数字用户 ID 才能访问其文件。各自的主机和容器用户的名称是无关的。

我见过的通常最佳实践是以 root 身份进行所有安装,然后创建一个非 root 用户(其用户 ID 无关紧要,只要它不为 0),并使其成为执行容器时的默认用户。

FROM ubuntu

# Defaults to root; root will own all installed files
RUN ... && make install

# Set up a non-root user
RUN useradd myapp
USER myapp

# Say how to run the container (as user "myapp")
CMD ["myapp"]

关于linux - 在 Dockerfile 中使用 useradd,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57731239/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com