Dockerfile 和 docker-compose 文件中定义的用户有什么区别?

What is the difference in the user defined in Dockerfile and docker-compose file?

我有一个 Dockerfile 如下:

FROM jenkins/jenkins:latest

USER root

RUN whoami

USER jenkins

RUN whoami

和这个 docker-compose 文件

version: '2'
services:

  test:
    build:
      context: .
      dockerfile: Dockerfile

    container_name: test
    hostname: test

    ports:
      - '8080:8080'

    user: root

我在想

  1. docker-compose 中定义的用户与 dockerfile

    中定义的用户有什么区别
  2. 如何查看构建阶段的日志?当我 RUN whoami 时,如何以及在哪里可以看到结果?

如果问题是如果我将 docker-compose 中的用户更改为 other

怎么办
version: '2'
services:

  test:
    build:
      context: .
      dockerfile: Dockerfile

    container_name: test
    hostname: test

    ports:
      - '8080:8080'

    user: other

为什么不起作用

如果我将 docker 文件更改为

FROM jenkins/jenkins:latest

USER root

RUN whoami

RUN groupadd -g 999 docker && \
 usermod -aG staff,docker jenkins

USER jenkins

RUN whoami

并将 docker-compose 更改为

version: '2'
services:

  test:
    build:
      context: .
      dockerfile: Dockerfile

    container_name: test
    hostname: test

    ports:
      - '8080:8080'

    user: jenkins

还是不行。

  1. 问题是什么

  2. 另一个问题是我什么时候做 docker exec -it container_name bash 它以 root 用户身份访问容器。如何改变

docker-compose 文件中的 user 配置将覆盖用于在容器中执行命令的用户。如果省略它,它将使用 Dockerfile 中最后设置的 USER。如果两者都没有,它应该默认为 root。

请注意,您的 whoami 命令是 运行 在 build-time(而不是 run-time),因此它们不应受到您在 [=20] 中指定的内容的影响=] 文件,它仅在 run-time 覆盖用户。

要查看整个构建日志,您可以使用 docker compose build --progress flat