如您所知,出于安全原因,除非您需要,否则最好不要使用 root 用户。我有一个用于多阶段步骤的 Dockerfile
FROM golang:latest AS base
WORKDIR /usr/src/app
# Create User and working dir
RUN addgroup --gid 42000 app
RUN useradd --create-home --uid 42000 --gid app app
RUN chown -R app:app /usr/src/app
RUN chmod 755 /usr/src/app
# Compile stage based on Debian
FROM base AS builder
USER app
# Copy form computer to current WORKDIR container
COPY . .
# Exit immediately if a command exits with a non-zero status
RUN set -xue && \
make go-build-linux
# Final stage
FROM debian:latest
USER app
EXPOSE 14001
RUN apt-get update && \
apt-get install -y ca-certificates
WORKDIR /usr/src/app
COPY --from=builder /usr/src/app/server .
CMD ["./server"]
Run Code Online (Sandbox Code Playgroud)
问题是我试图在所有步骤中重用用户,但似乎用户范围是分阶段的,我不知道如何重用它。
您知道如何在多阶段 Dockerfile 中重用用户并尝试避免使用 Dockerfile 中的 root 用户吗?
谢谢!
docker如果不在每个阶段重新创建用户(至少相同),则不可能在构建UID的GID多个阶段中重复使用同一用户,因为每个阶段FROM都是从一个干净的石板开始FROM image,其中用户UID=42000不太GID=42000可能已经存在。
我不知道有任何反对root在容器内构建用户的建议。建议以非特权用户身份运行服务,但某些容器进程必须以用户身份运行root(即sshd):
\n\n防止容器内的权限提升攻击的最佳方法是将您的 container\xe2\x80\x99s 应用程序配置为以非特权用户身份运行。对于其进程必须以
\nroot容器内的用户身份运行的容器,您可以将此用户重新映射到 Docker 主机上的权限较低的用户。映射的用户被分配了一系列 UID,这些 UID 在命名空间中的功能与从 0 到 65536 的普通 UID 一样,但在主机本身上没有特权。
提示:如果最后一个用户是 root,Haskell Dockerfile Linter会抱怨,您可以将其配置为钩子以在提交代码之前捕获类似的内容。git pre-commit
| 归档时间: |
|
| 查看次数: |
4254 次 |
| 最近记录: |