首页/云/Docker 容器速查/--privileged 的影响与替代方案
资源与安全50 条

--privileged 的影响与替代方案

特权容器获得近乎宿主 root 的能力面(全部能力、设备访问、关闭默认隔离策略):仅在明确受控场景使用,优先按需放权替代。

Docker 容器速查云更新于 2026-10-13

特权容器意味着什么

--privileged 会给容器近乎宿主 root 的能力:放开全部 capabilities、允许访问所有设备、关闭默认的 seccomp 与 AppArmor 约束,并可与内核接口交互。它只应该用在明确受控且有硬性需求的场景。多数需求其实可以换成按需放权:加单项能力、指定具体设备、精确放开某条安全策略。

基本信息

风险面全部 capabilities、设备访问、默认安全策略被关闭
替代做法--cap-add 单项 / --device 指定设备 / --security-opt 精确放开
检查方式docker inspect 的 HostConfig.Privileged 字段
影响范围可读写宿主设备与内核接口,等同宿主机高权限
适用平台Docker Engine(Linux 宿主)

典型使用场景

  • 容器内运行网络诊断工具,需要操作网络栈
  • 需要访问特定设备:GPU、串口、tun 设备
  • 做文件系统相关操作的运维容器
  • 排查非特权容器的 operation not permitted,定位缺哪项能力
  • 审计存量容器,找出不必要的高权限配置

审计与按需放权

审计与按需放权
# 审计运行中容器的特权情况
docker ps -q | xargs -r docker inspect -f '{{.Name}} privileged={{.HostConfig.Privileged}}'
# 先拆解需求,再逐项放开而不是整体开特权
docker run --rm --cap-add=NET_ADMIN --device=/dev/net/tun alpine true
docker run --rm --cap-add=SYS_ADMIN alpine true            # 按单项能力验证
docker inspect -f '{{.HostConfig.Privileged}} {{.HostConfig.CapAdd}}' 容器名

两种做法对照

维度--privileged按需放权
能力集全部 capabilities--cap-add 单项或几项
设备访问全部设备--device 指定路径
安全策略seccomp 与 AppArmor 默认约束被关闭保留默认约束,必要时精确放开
适用场景内核级操作、受控调试绝大多数生产负载
能说清「为什么需要特权、具体需要哪些能力」,通常就已经能把配置缩到按需放权,这一步比直接开特权更有价值。
特权容器如果还挂载了宿主目录,容器内的写入会直接作用在宿主文件系统上,操作窗口与审计要求要相应收紧。
特权开关属于创建时参数,只能通过停旧容器、建新容器来收敛,热改配置不会生效。

易错点

  • CI 里图省事全开特权:流水线成为高风险入口,构建权限与运行权限应当分开设计
  • 用开特权代替排障:遇到权限报错就先加特权,既掩盖了真正的配置问题,又留下长期风险
  • 特权容器内挂载宿主目录做写操作:可能直接破坏宿主文件系统,属于事故级风险
  • 以为特权只影响容器内部:它能访问宿主设备与内核接口,影响范围等同于拿到宿主高权限

数据来源与参考

  • Docker 官方文档:Runtime privilege 与 --privileged(docs.docker.com)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌