RUN useradd ...
命令在Dockerfile中会发生什么?
该用户在哪里创建?它住在哪里?它是否被添加到内核管理的UID池中?
当构建上下文容器退出时,它会发生什么?
/etc/passwd
(可选)中的某些特定用户名和其他属性的映射。不存在“uid池”;如果我现在恰好有用户ID 12345,则文件系统所有权检查等会进行数字比较,这就是结束了。RUN useradd
,它将运行useradd
命令,该命令(除其他外)向镜像的文件系统空间中的/etc/passwd
添加条目。Docker知道在镜像的/etc/passwd
文件中查找Dockerfile USER
指令或docker run -u
选项。 (但您也可以在那里使用数字UID。)docker run -v
选项将主机目录映射到容器中,则容器进程必须以root或与目录所有者相同的数字用户ID运行才能访问其文件。相关主机和容器用户的名称并不重要。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"]