Docker-Compose:cap_drop 和 cap_add 的顺序?

The*_*veO 4 docker linux-capabilities docker-compose

搬运工撰写文件参考描述cap_addcap_drop在一个相当简洁时尚元素:

添加或删除容器功能。有关完整列表,请参阅 man 7 功能。

这些元素是否有顺序,即先添加后删除?或者顺序是否重要(这在 YAML 中是否完全支持字典?)?

当其中之一cap_addcap_drop包含时会发生什么ALL

我知道 Docker Linux 默认功能集,在https://github.com/moby/moby/blob/master/oci/caps/defaults.go#L4 中定义。

The*_*veO 8

在浏览了 moby 源代码之后,我终于找到了TweakCapabilities():它需要两组功能来添加和删除,强制执行以下方案;因此适用于 docker-compose.yaml,其中 YAML 没有定义cap_addcap_drop键的顺序。下面的第一个匹配项将终止列表。

  • 容器是privileged: true:忽略cap_addcap_drop完全返回所有可用的功能
  • 这两个cap_addcap_drop空的:返回默认泊坞窗的功能集。
  • cap_addcontains ALL:返回所有功能减去中列出的功能cap_dropALL在后者中忽略)。
  • cap_dropcontains ALLcap_add仅返回功能,忽略任何 Docker 默认功能。
  • default:首先从 中列出的默认集中删除所有能力cap_drop,然后在 中添加能力cap_add,最后返回结果。

如果我没记错的话,这也可以用更容易理解的方式表示如下......

privileged: true
所有能力:忽略cap_addcap_drop(老板模式)
cap_add cap_add: ['CAP_A'] cap_add: ['ALL']
cap_drop 默认功能 默认 + CAP_A 所有能力
cap_drop: ['CAP_Z'] 默认 -CAP_Z 默认 - CAP_Z+CAP_A 全部 -CAP_Z
cap_drop: ['ALL'] 无能力 CAP_A 所有能力

最后,只有以下两个“确定性”组合始终包含cap_drop: ALL并遵循最小特权行:

cap_add cap_add: ['CAP_A']
 
 
cap_drop: ['ALL'] 无能力 CAP_A