核心是通过 copy --chown 显式设置文件归属非 root 用户以规避权限风险;需提前创建固定 uid/gid 的非特权用户,确保 user、copy --chown 和 workdir 权限一致,并对敏感文件单独 chmod 限制权限,禁用 add。

核心是让文件在复制进镜像时,就归属运行应用的非 root 用户,避免默认归 root 带来的权限隐患和安全风险。
COPY --chown 必须显式声明
不要依赖默认行为。每次 COPY 涉及应用代码、配置、静态资源或日志目录时,都应带上 --chown 参数:
- 用用户名+组名:如
COPY --chown=appuser:appuser src/ /app/ - 用 UID+GID 更稳定:如
COPY --chown=1001:1001 config.yaml /etc/myapp/ - 只指定用户时,组自动设为该用户的主组:
--chown=appuser
目标用户必须提前创建
--chown 中指定的用户(或 UID)必须已在镜像中存在,否则构建失败。创建方式要明确:
在 Linux 上通过 Docker 运行 OpenClaw,并使用 Tailscale 实现远程访问。⚠️ 涉及 sudo、Docker、Tailscale和凭证挂载——请先查阅安全章节...
- 使用
adduser -D(Alpine)或useradd -r(Debian/Ubuntu)建非特权用户 - 固定 UID/GID,便于多环境一致,例如:
RUN adduser -u 1001 -D appuser - 避免仅靠基础镜像自带用户(如
node),需确认其存在且 UID 稳定
匹配 USER 指令,形成权限闭环
文件归属必须与容器最终运行用户一致,否则仍会报“Permission denied”:
- 先
RUN adduser ...创建用户 - 再
COPY --chown=appuser:appuser ...复制文件 - 最后
USER appuser切换上下文 - 确保
WORKDIR目录也由该用户拥有(可用RUN chown -R appuser:appuser /app或在 COPY 时一并覆盖)
敏感文件单独加固
配置文件、密钥、证书等不能仅靠 --chown,还需限制权限位:
- 复制后加
RUN chmod 600 /etc/myapp/secrets.json(仅属主读写) - 避免
COPY后留 777 或 644 给含密码的文件 - 生产环境禁用
ADD(支持自动解压/远程 URL,增加不可控风险),统一用COPY










