调用时是root
默认用户docker exec
(不带--user
)吗?
USER
Dockerfile 中的一行是否会影响默认用户docker exec
?
docker exec 中的默认用户与用于启动容器的用户相同,可以在 docker run 或您的 compose 文件中设置。
如果您在启动容器时没有明确设置用户,它将默认为镜像中配置的用户,您可以检查镜像来查找。这是由 Dockerfile 中的最后一个 USER 行配置的。它也可以由 FROM 行指定的父映像配置。
如果镜像和运行命令都没有指定用户,docker 默认为root
, uid 0。
Dockerfile 中的 USER 行会影响 docker exec 的默认用户吗?
USER 指令设置用户名(或 UID)和可选的用户组(或 GID),以在运行映像时以及 Dockerfile 中跟随它的任何 RUN、CMD 和 ENTRYPOINT 指令使用。
这是一个示例 Dockerfile,它创建一个用户并将其作为运行用户。
cat Dockerfile
FROM ubuntu:latest
RUN useradd -r sathya
USER sathya
构建镜像
docker build -t sathya:user .
Sending build context to Docker daemon 19.46kB
Step 1/3 : FROM ubuntu:latest
---> 113a43faa138
Step 2/3 : RUN useradd -r sathya
---> Running in 5b72508a891d
Removing intermediate container 5b72508a891d
---> b81692196e13
Step 3/3 : USER sathya
---> Running in d43d399a86ac
Removing intermediate container d43d399a86ac
---> c0388a898992
Successfully built c0388a898992
Successfully tagged sathya:user
运行一个容器
docker run -it -d sathya:user bash
0903e85fa4de4bb820f015f3ff2bbca9eb2c038814ff7ea809519334687597c7
执行容器。看到运行用户是指定的默认用户
docker exec -it 0903e85fa4de bash
sathya@0903e85fa4de:/$ whoami
sathya