Dockerfile中USER与Kubernetes Deployment中runAsUser的差异及疑问
若Dockerfile与Deployment中定义了不同的用户,容器内应用将以哪个用户运行?
Kubernetes的配置优先级高于Dockerfile。如果Deployment的securityContext字段中指定了runAsUser/runAsGroup,容器会严格按照这个配置的用户运行,覆盖Dockerfile里USER指令的设置。若Deployment中未定义用户,Pod容器是否会以Dockerfile中定义的用户运行?
是的。如果Deployment没有指定运行用户,容器会沿用Dockerfile里USER指令定义的用户启动应用。若Dockerfile与Deployment中均未定义用户,服务是否会以root用户运行?
没错,这种情况下容器默认会以root用户(UID为0)运行,这是绝大多数基础容器镜像的默认行为。能否在Kubernetes Deployment的YAML文件中指定有效的随机UUID?若该用户不存在于镜像中,Kubernetes是否会自动创建并以此用户运行服务?
首先,不能直接指定随机UUID作为运行用户。其次,Kubernetes要求指定的用户ID(UID)必须是镜像中已存在的用户标识——如果指定的UID在镜像里没有对应的用户,容器启动会直接失败,Kubernetes不会自动创建这个用户。如果需要使用某个特定UID的非root用户,得先在Dockerfile中通过RUN useradd -u <目标UID> <用户名>这类命令创建好用户,再在Deployment的securityContext里指定该UID。
内容的提问来源于stack exchange,提问作者Rohit

