应使用官方镜像并指定具体标签,如from python:3.12-slim,禁用latest和第三方镜像,从源头控制安全风险。

直接上实用配置,不绕弯子。核心是让容器跑得稳、权限低、漏洞少、数据不裸奔。
基础镜像与构建安全
从源头控制风险:
- 始终用 Docker Hub 官方镜像(如 python:3.12-slim、node:20-alpine),避免第三方或无源镜像
- Dockerfile 开头写明具体标签,禁用 latest:FROM python:3.12-slim(不是 FROM python)
- docker scan 镜像名 检查已知 CVE 漏洞
运行时权限最小化
杜绝 root 运行,限制能力边界:
- Dockerfile 中创建非 root 用户并切换:RUN adduser -D appuser && chown -R appuser /app,然后 USER appuser
- COPY 文件时指定属主:COPY --chown=appuser:appuser . /app
- docker run --user 1001:1001 --cap-drop=ALL --cap-add=NET_BIND_SERVICE ...
- 不要加 --privileged;挂载宿主机路径时加 :ro(只读)更稳妥
敏感数据与运行环境隔离
不让密钥、密码出现在镜像或命令行里:
- 用 Docker Secrets(仅 Swarm 模式)或 外部 Vault + 注入环境变量 管理密码、Token
- 禁止在 Dockerfile 中写 ENV DB_PASSWORD=xxx 或 RUN echo "pass" > /etc/passwd
- 启动容器时用 --read-only 挂载根文件系统,仅对必要目录加 --tmpfs /run --tmpfs /tmp
- 网络默认用自定义 bridge 网络,禁用 --network host,必要时配 --network mynet --ip 172.20.0.10
内核级调用限制(Seccomp)
堵住高危系统调用入口:
- 生产环境启用自定义 Seccomp 策略,例如禁用 ptrace、mount、setuid、reboot
- 加载策略命令:docker run --security-opt seccomp=./seccomp-restrictive.json ...
- 可先用 Docker 默认策略(builtin)测试,再逐步收紧;策略文件需 JSON 格式且符合 Docker 规范
- 搭配 AppArmor 或 SELinux 策略(如 --security-opt apparmor=myprofile)效果更佳











