docker安全隔离需主动配置四类关键项:运行权限(禁用特权、精简capabilities、指定非root用户)、文件系统(挂载只读、例外路径用tmpfs或显式卷)、网络(创建独立自定义网络、禁用容器互通、端口绑定本地回环)、资源与镜像(选用精简镜像、限制内存/cpu/进程数、启用内容信任及漏洞扫描)。

直接上核心配置要点,不绕弯子。安全隔离不是开箱即用的默认行为,得靠主动设置四类关键项:运行权限、文件系统、网络、资源限制。
运行权限最小化
容器里别让进程以 root 身份跑,这是最基础也最容易被忽略的一环:
- 在 Dockerfile 中明确指定非 root 用户,比如 USER 1001(提前在镜像中创建该用户并赋予必要权限)
- 启动时禁用特权模式:--privileged=false(默认就是 false,但务必确认没写 --privileged)
- 能力集精简授权:用 --cap-drop=ALL --cap-add=NET_BIND_SERVICE,只加实际需要的能力,比如只需监听 80 端口就只加这个
文件系统只读加固
多数路径不需要写入,强制只读能防篡改和恶意落盘:
- 整体挂载为只读:--read-only
- 仅对必须写入的目录例外处理:日志用 --tmpfs /var/log:rw,size=10m,临时文件用 --tmpfs /tmp,持久数据则通过 -v /host/path:/container/path:rw 显式挂载
- 敏感路径如 /etc、/usr、/bin 默认已包含在只读范围内,无需额外操作
网络严格分隔
默认 bridge 网络下所有容器互通,等于裸奔。必须手动划清边界:
- 不用默认网络,创建独立自定义网络:docker network create app-a-net
- 启动容器时显式指定:--network app-a-net,不同业务用不同网络名
- 禁止跨网通信:Docker 20.10+ 默认关闭 --icc(容器间通信),保持关闭即可;不要用 --link 回退到旧模式
- 对外端口只绑本地回环:-p 127.0.0.1:8080:80,公网访问统一走 Nginx 或 Traefik 这类反向代理
资源与镜像源头管控
防住横向移动和供应链攻击,得从启动前就开始控制:
- 镜像选精简版:node:18-alpine、python:3.11-slim,避开 ubuntu:latest 这类大而全但漏洞多的基础镜像
- 启动时限制资源:--memory=512m --cpus=0.5 --pids-limit=100,防 fork bomb 和内存耗尽
- 启用内容信任:export DOCKER_CONTENT_TRUST=1,确保只拉取签名镜像
- 定期扫描漏洞:trivy image myapp:latest 或 docker scan myapp:latest











