【问题标题】:Building Docker image as non root user以非 root 用户身份构建 Docker 映像
【发布时间】:2021-07-19 13:06:00
【问题描述】:

这里是新人,想知道是否有人以非 root 用户的身份构建图像的经验?

我正在构建 Kotlin 项目(2 步构建),我现在的目标是以非 root 用户身份构建它。这是我的 Dockerfile 的样子。任何帮助将不胜感激:

# Build
FROM openjdk:11-jdk-slim as builder

# Compile application
WORKDIR /root
COPY . .
RUN ./gradlew build

FROM openjdk:11-jre-slim

# Add application
COPY --from=builder /root/build/libs/*.jar ./app.jar

# Set the build version
ARG build_version
ENV BUILD_VERSION=$build_version

COPY docker-entrypoint.sh /
RUN chmod 777 /docker-entrypoint.sh
CMD /docker-entrypoint.sh

【问题讨论】:

  • 你不需要root。在大多数系统上,您必须在 docker 组内。
  • 我在问如何做类似RUN groupadd -r test && useradd --no-log-init -r -g test test 的事情并在这个 dockerfile 中使用该用户
  • 一个Docker容器有自己的文件系统空间和自己的/etc/passwd文件;容器内的用户通常不会匹配任何特定的主机用户。

标签: docker dockerfile docker-build


【解决方案1】:

要使用 Docker,您无需成为 root 用户,您只需在 docker 用户组内即可。

在 Linux 上:

  1. 如果还没有 docker 组,您可以使用命令sudo groupadd docker 创建一个。
  2. 使用命令 sudo usermod -aG docker [username of user] 将您自己和您希望能够访问 docker 的任何其他用户添加到此组。
  3. 重新登录,以便 Linux 可以重新评估用户组。

如果您不尝试以 root 身份运行命令,而是希望以非 root 身份运行容器,则可以使用以下 DOCKERFILE 内容(在 FROM 之后但在其他任何内容之前插入。)

# Add a new user "john" with user id 8877
RUN useradd -u 8877 john
# Change to non-root privilege
USER john

【讨论】:

  • 哦,第二部分正是我想要的。所以我只是添加一个这样的用户,仅此而已?
  • 是的-应该可以。它需要做的就是创建一个新用户(在本例中名为john)并切换到这个新用户。
  • 为什么用户 ID 为 8877?这是一个任意的 ID 还是那么重要?
  • 很确定这是任意的。老实说,不知道为什么我把它放在那里。
  • @Adil Sadik 在 Linux 中,用户由唯一的 uid 和用户名标识,设置 -u 标志您可以选择一个 id。如果没有标志,它将分配下一个可用的。 linux.die.net/man/8/useradd
猜你喜欢
  • 2021-04-20
  • 1970-01-01
  • 1970-01-01
  • 2017-10-11
  • 2019-03-22
  • 1970-01-01
  • 1970-01-01
  • 2021-10-08
  • 2019-06-24
相关资源
最近更新 更多