Docker安全加固需围绕最小权限、最小攻击面、可审计、可隔离四大核心,在镜像构建、运行时启动、编排文件三层落实:Dockerfile中用精简镜像、非root用户、清理缓存;docker run中禁特权、限资源、只读根、drop all caps再按需添加;docker-compose.yml中配置user、read_only、cap_drop/add、seccomp、apparmor及ulimits等。

Docker 容器安全加固不是堆砌参数,而是围绕“最小权限、最小攻击面、可审计、可隔离”四个核心展开。配置要落在镜像构建、运行时启动、编排文件三个层面,缺一不可。
Dockerfile 中的安全构建配置
这是第一道防线,决定镜像本身是否干净可信:
- 使用精简且受信的基础镜像,比如
python:3.11-slim或gcr.io/distroless/python3,避免python:3.11这类带完整包管理器的镜像 - 构建时禁用缓存并清理临时文件:
RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/*(Debian系)或RUN apk add --no-cache curl(Alpine) - 显式创建非 root 用户并切换:
RUN addgroup -g 1001 -f appgroup && adduser -S appuser -u 1001 USER appuser
- 不挂载敏感路径(如
/proc、/sys),不保留调试工具(strace、bash、curl等除非业务必需)
docker run 命令级运行时加固
适用于单容器调试或脚本化部署:
- 禁用特权模式,丢弃全部能力再按需添加:
--cap-drop=ALL --cap-add=NET_BIND_SERVICE --cap-add=CHOWN - 启用只读根文件系统:
--read-only - 挂载内存临时目录替代可写
/tmp:--tmpfs /tmp:rw,noexec,nosuid,size=20M - 限制资源防止 DoS:
--memory=512m --cpus=1 --pids-limit=100 - 禁止获取新权限:
--security-opt=no-new-privileges - 指定用户和组(UID/GID):
-u 1001:1001
docker-compose.yml 中的生产级配置模板
适合多服务协同场景,兼顾可维护性与安全性:
version: '3.8'
services:
api:
image: my-registry/api:v1.2
user: "1001:1001"
read_only: true
tmpfs:
- /tmp:rw,noexec,nosuid,size=50M
- /var/run:rw,noexec,nosuid,size=10M
cap_drop:
- ALL
cap_add:
- NET_BIND_SERVICE
- CHOWN
security_opt:
- no-new-privileges:true
- seccomp:/etc/docker/seccomp.json
- apparmor:docker-default
ulimits:
nofile: { soft: 100, hard: 200 }
nproc: 50
mem_limit: 512m
cpus: 1.0
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"关键点在于:user 和 read_only 是基础项,必须启用;cap_drop/ cap_add 要结合应用实际需求精简,不是越少越好,而是“够用即止”;seccomp 和 apparmor 配置文件需提前部署到宿主机对应路径,否则会静默失效。
不复杂但容易忽略。


















