Docker 容器不是天然安全的:默认以 root 运行、镜像可能包含漏洞、构建时 Secret 泄露。本文覆盖 Docker 生产环境的安全加固全套方案。
一、镜像安全扫描
# Trivy(最受欢迎的开源扫描器)
trivy image my-app
# Snyk(商业, generous free tier)
snyk container test my-app
# Docker Scout(Docker 官方)
docker scout quickview my-app
docker scout cves my-app
扫描内容:OS 包漏洞(CVE)、npm/pip 依赖漏洞、不安全的配置(如 root 运行)。
二、运行时安全加固
2.1 非 root 运行
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
USER appuser
CMD ["node", "server.js"]
2.2 只读文件系统
docker run --read-only -v /tmp:/tmp my-app
2.3 资源限制(防 DoS)
docker run --memory=512m --cpus=1.0 my-app
2.4 禁用特权模式
# ❌ 危险:容器获得宿主机 root 权限
docker run --privileged my-app
# ✅ 只授予需要的 cap
docker run --cap-drop=ALL --cap-add=NET_BIND_SERVICE my-app
三、Secret 管理
3.1 BuildKit Secret(构建时密钥不写入镜像)
# syntax=docker/dockerfile:1
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN --mount=type=secret,id=npmrc,target=/root/.npmrc \
npm ci
COPY . .
RUN npm run build
# 构建时传入 secret(不写入镜像层)
DOCKER_BUILDKIT=1 docker build --secret id=npmrc,src=$HOME/.npmrc .
3.2 运行时 Secret(Docker Swarm / K8s Secret)
# Docker Swarm
echo "my-password" | docker secret create db_password -
docker service create --secret db_password my-api
四、私有 Registry(Harbor)
# 自建 Harbor(企业级 Registry + 漏洞扫描 + RBAC)
docker-compose -f harbor.yml up -d
# 推送镜像到私有 Registry
docker tag my-app harbor.example.com/my-project/my-app:v1.0
docker push harbor.example.com/my-project/my-app:v1.0
常见问题(FAQ)
Docker 容器会被黑客攻击吗?
会。如果容器以 root 运行且应用程序存在漏洞,攻击者可能获得容器内 root 权限。虽然突破到宿主机需要额外的内核漏洞(容器逃逸),但不应轻视容器安全。
扫描出漏洞怎么办?
- 更新基础镜像(
docker pull node:20-alpine) - 更新应用依赖(
npm audit fix) - 如果漏洞无修复版本,评估风险(有些 CVE 不影响实际使用场景)
相关阅读
继续阅读
探索更多技术文章
浏览归档,发现更多关于系统设计、工具链和工程实践的内容。
「saas」更多文章
自定义域名接入 Cloudflare:CDN 加速与缓存规则配置实战
手把手讲解自定义域名接入 Cloudflare CDN 的完整流程:NS 接管、SSL/TLS 模式选择、橙云代理与灰云 DNS 的区别,并用 2024 年后的新 Cache Rules 引擎实战配置静态资源长缓存、HTML 不缓存、后台 Bypass,让边缘缓存命中率最大化。
Hugo 部署到 Cloudflare Pages 实战:从 Git 推送到全球边缘上线
详解 Cloudflare Pages 部署 Hugo 静态站的完整流程,涵盖框架预设、HUGO_VERSION 环境变量固定、构建命令、自定义域名、分支预览、_headers 缓存安全头配置及常见构建失败排查,一次推送即可全球边缘上线。
Cloudflare Workers 入门实战:在边缘运行你的第一行代码
一份面向初学者的 cloudflare workers 教程,从 V8 Isolate 运行时模型讲起,手把手演示 wrangler 初始化、路由分发、KV 存储、Cache API 缓存响应与环境变量配置,帮你在 30 分钟内部署第一个生产可用的边缘 Serverless 应用。