以非root用户身份构建Docker镜像

vuk*_*icf 15 docker dockerfile docker-build

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

我正在构建 Kotlin 项目(两步构建),我现在的目标是以非 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
Run Code Online (Sandbox Code Playgroud)

Jon*_*son 18

为了使用 Docker,您不需要成为 root 用户,只需成为 docker 用户组的成员即可。

在 Linux 上:

  1. 如果还没有 docker 组,您可以使用命令创建一个sudo groupadd docker
  2. 使用命令将您自己以及您希望能够访问 docker 的任何其他用户添加到该组sudo usermod -aG docker [username of user]
  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
Run Code Online (Sandbox Code Playgroud)

  • 请注意[文档](https://docs.docker.com/engine/install/linux-postinstall/)关于将用户添加到“docker”组的警告:“**docker组授予root权限-level 权限** 给用户。有关这如何影响系统安全性的详细信息,请参阅 [Docker Daemon Attack Surface](https://docs.docker.com/engine/security/#docker-daemon-attack-surface )”。 (5认同)
  • 为什么用户 ID 8877?这是一个任意 ID 还是很重要? (3认同)
  • @Adil Sadik在Linux中,用户由唯一的uid和用户名来标识,通过设置-u标志您可以选择一个id。如果没有该标志,它将分配下一个可用的。https://linux.die.net/man/8/useradd (3认同)