首页/安全/漏洞与攻击面速查/容器挂载 docker.sock 的风险
主机与服务风险面53 条

容器挂载 docker.sock 的风险

把宿主 /var/run/docker.sock 挂进容器后,容器内进程可完全控制宿主 Docker:创建挂载宿主根目录的容器、读取所有镜像与密钥;这是容器逃逸到宿主控制的常见通道。

漏洞与攻击面速查安全更新于 2026-10-13

挂载 docker.sock 的风险是什么

把宿主机的 /var/run/docker.sock 挂进容器,等价于把宿主 Docker 的控制权交给容器内进程。Docker 守护进程接受通过该套接字发来的指令,因此容器内的进程可以创建新容器并挂载宿主机根目录、读取全部镜像与其中的凭据、访问其他容器的文件系统,从而从容器内取得宿主机级别的控制能力。这个模式在持续集成与自动化运维场景中很常见,因为方便,甚至经常与特权模式一起出现。

基本信息

涉及路径/var/run/docker.sock(宿主 Docker 守护进程套接字)
典型场景CI/CD 构建、自动化部署、容器内管理其他容器
危害层级等价于宿主机 root 权限
替代方案API 封装服务、专用最小权限代理、rootless 模式

典型使用场景

  • 盘点现有容器:找出挂载了 docker.sock 的实例并评估必要性
  • CI 构建场景评估改用不存在宿主套接字的构建方式,如按需创建隔离构建环境
  • 需要动态创建容器的应用改为经 API 封装服务间接调用,而不是直接持有套接字
  • 无法避免挂载时改用只读方式并限制容器权限,同时把构建机与生产宿主分开
  • 安全基线检查中把挂载套接字与特权模式列为同一类高危配置

风险面排查

风险面排查
# 列出容器的挂载来源,检查是否出现 docker.sock
docker inspect <容器名> \
  --format '{{range .Mounts}}{{.Source}} -> {{.Destination}}{{"\n"}}{{end}}'

# 批量筛出所有挂载了宿主套接字的容器
docker ps -q | xargs -I{} docker inspect {} \
  --format '{{.Name}} {{range .Mounts}}{{.Source}} {{end}}' | grep 'docker.sock'

# 同时检查是否开启了特权模式
docker ps -q | xargs -I{} docker inspect -f '{{.Name}} {{.HostConfig.Privileged}}' {} | grep true

收敛方向与代价

方向做法权衡
评估必要性多数场景可用 API 封装替代直接挂载需开发一个中间服务
只读挂载挂载时加 :ro,限制写入操作仍可读取全部镜像与容器信息
限制权限不配合 privileged,收敛能力集部分运维操作会受限
rootless / 专用代理使用 rootless Docker 或最小权限代理改造工作量较大
CI/CD 构建场景是这类配置最集中的地方:应把构建机单独池化并与生产宿主彻底隔离,让构建任务的失控风险不落到生产节点上。
挂载套接字后又给容器 privileged,两层权限叠加,效果等于直接把宿主机 root 交出去,容器隔离在此配置下基本失效。

易错点

  • 挂载套接字后又加 privileged:两层权限叠加,等价于直接交出宿主 root
  • 认为只读挂载就安全:套接字是双向通道,读取镜像与容器信息同样构成信息泄露
  • CI 构建机与生产宿主共享:构建任务被投毒或失控时直接影响生产节点
  • 长期未盘点:历史遗留的自动化脚本容器仍在挂载套接字,而维护者已经离开

数据来源与参考

  • Docker 官方文档(dockerd socket 权限说明)
  • OWASP Docker Security Cheat Sheet
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌