在多级Dockerfile中重用用户
正如您所知,出于安全原因,如果需要,使用root user execep是不好的。我有一个Dockerfile,用于多阶段步骤在多级Dockerfile中重用用户,docker,dockerfile,Docker,Dockerfile,正如您所知,出于安全原因,如果需要,使用root user execep是不好的。我有一个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
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"]
问题是,我试图在所有步骤中重用用户,但似乎用户范围是分阶段的,我不知道如何重用它
您知道如何在多阶段Dockerfile中重用用户并避免使用Dockerfile中的root用户吗
谢谢 TL;博士
如果不重新创建用户(至少相同的UID
和GID
),则无法在docker
构建的多个阶段重复使用同一用户在每个阶段中,由于来自的每个都是从一张来自图像
的干净板子开始的,其中用户UID=42000
和GID=42000
不太可能已经存在
我不知道有任何建议反对在容器中以
root
用户身份构建。它是(即sshd
):
防止容器内的权限提升攻击的最佳方法是将容器的应用程序配置为以非特权用户的身份运行。对于其进程必须作为容器中的root
用户运行的容器,您可以将此用户重新映射到Docker主机上权限较低的用户。为映射的用户分配了一系列UID,这些UID在命名空间中作为0到65536之间的普通UID运行,但在主机本身上没有权限
提示:如果您可以将其配置为在提交codez之前捕获类似的内容,则会抱怨。避免将其构建为
根
?为什么不仅要在最后一层创建用户?这就是我现在正在做的,但我关心的是根,如果我可以避免使用它,它会更好。因为,比如说为了安全。我们正在使用一些依赖项,并试图避免将其安装为root,这样更好。以root
用户身份运行服务是一回事,以root
用户身份构建服务是另一回事。如果你的卑鄙的人是认真的,我希望他们会使用hadolint来删除你的Dockerfile
,如果出现这种情况,就会出错。一些服务只能作为root
用户(即sshd
)运行,在这种情况下,它们可能无论如何都会运行。因此,如果我们将非root用户添加到最终阶段,或者所有阶段都应该在非root用户下运行,这会很好吗?只有最终阶段应该可以。