docker无一键安全模板,需协同配置daemon.json(如seccomp-profile、userns-remap)、镜像层(非root用户、能力裁剪)及运行时参数(--read-only、--cap-drop=all)三层加固,方能建立默认最小权限基线。

Docker 本身没有“一键设置全局默认安全策略模板”的开关,但可以通过组合守护进程配置、运行时参数和镜像构建规范,让绝大多数容器自动继承一套最小权限基线。关键不是改一个地方,而是把几层控制点都配到位。
给所有容器加上基础防护底线
Docker daemon 启动时可通过 --default-ulimit、--icc=false 等参数设默认行为,但真正影响容器安全基线的是以下三项协同:
-
--default-runtime=runc(确保使用标准运行时) -
--seccomp-profile=/etc/docker/seccomp.json(指定全局默认 seccomp 策略文件) -
--userns-remap=default(启用用户命名空间映射,隔离 UID/GID)
这些需写入 Docker 的守护进程配置文件(通常是 /etc/docker/daemon.json),重启 dockerd 生效。例如:
MiniMax 图片理解 + 网络搜索 MCP 工具。适配 Docker 环境(极空间等),支持图片 OCR 识别、图像内容理解、网络搜索。API Key 安全存储在本地 credentials 文件,不暴露在代码中。
{
"default-ulimit": {
"nofile": {"Hard": 65536, "Soft": 65536}
},
"icc": false,
"seccomp-profile": "/etc/docker/seccomp-restrictive.json",
"userns-remap": "default"
}
用自定义 seccomp 文件作为事实上的“默认模板”
Docker 默认用内置 default.json,但它允许约 300+ 个系统调用,不够严格。建议替换为更收敛的策略,比如只允许 read, write, openat, socket, bind, listen, accept4 等核心调用,其余一律 SCMP_ACT_ERRNO 拒绝。策略文件需是合法 JSON,且 action 字段必须明确(如 "action": "SCMP_ACT_ERRNO")。
镜像层也要配合:强制非 root + 能力裁剪
即使 daemon 配了默认策略,镜像仍可能覆盖它。所以 Dockerfile 中要固化安全习惯:
- 开头就
USER appuser(确保该用户在镜像内已创建) - 不写
RUN chmod 777或COPY --chown=root:root - 构建时不加
--privileged,也不用--cap-add=ALL
这样,哪怕 docker run nginx 不带任何参数,实际启动的容器也已满足:非 root 用户、受限 capabilities、seccomp 过滤、用户命名空间映射。
运行时再补一道“兜底开关”
在无法修改 daemon 或镜像的场景下,可用 wrapper 脚本或 CI/CD 流水线强制注入安全参数:
docker run \ --read-only \ --tmpfs /run:size=64m \ --tmpfs /tmp:size=32m,noexec,nosuid \ --cap-drop=ALL \ --cap-add=NET_BIND_SERVICE \ --security-opt no-new-privileges \ --user 1001:1001 \ your-image
这套组合不是靠单点配置,而是让镜像、daemon、运行命令三层都默认“不越权”,才真正形成可落地的默认安全策略。










