Linux 在Dockerfile中使用useradd

Linux 在Dockerfile中使用useradd,linux,docker,uid,Linux,Docker,Uid,在Dockerfile中找到RUN useradd…命令时会发生什么情况? 那个用户是在哪里创建的?它住在哪里?它是否添加到内核管理的UID池中? 构建上下文容器退出时会发生什么情况?Linux中的“用户”是一个数字用户ID,加上到/etc/passwd中某些特定用户名和其他属性的映射(可选)。没有“uid池”这样的东西;若我现在碰巧有用户ID 12345,那个么像文件系统所有权检查这样的事情会做一个数字比较,就这样结束了 因此,如果Dockerfile执行RUN useradd,它将运行use

在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 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&unix问答网站上。我怎样才能把它移到那里并保留你的答案?