← 中文资源

简体中文版本

强制容器以非 root 用户运行

在镜像中设置数字非 root 用户与组,使容器逃逸时不再以 root 权限起步。

阅读英文原文

目标

容器默认以 root 运行,进程一旦被攻陷便在命名空间内拥有高权限。本配方在镜像中创建专用用户与组并以数字 uid 切换,运行时通过 id 校验实际用户,确保以非 root 运行;同时提醒可写路径需改归属,且不要为绑定低端口而授予额外能力。

步骤要点

  1. 在镜像中创建专用用户与组并切换。
  2. 运行时校验实际 uid 为非 root。
  3. 把可写路径改归属应用用户。
  4. 改绑高端口而不是授予能力。
FROM node:22-alpine
RUN addgroup -S app && adduser -S app -G app
WORKDIR /app
COPY --chown=app:app . .
USER 10001:10001
CMD ["node", "server.js"]

排错提示

  • 应用用户可能对文件不可写,需改归属。
  • 低于 1024 的端口需特殊权限。
  • 第三方镜像可能无法非 root 运行。

适用边界

  • 本身不移除 capabilities。
  • 无 root 镜像可能仍需能力调优。