docker compose file reference 以一种相当简洁的方式描述了 cap_add
和 cap_drop
元素:
这些元素是否有顺序,即先添加后删除?或者顺序是否重要(YAML 中是否完全支持字典?)?
当 cap_add
或 cap_drop
之一包含 ALL
时会发生什么?
我知道 https://github.com/moby/moby/blob/master/oci/caps/defaults.go#L4 中定义的 Docker Linux 默认功能集。
最佳答案
在浏览了 moby 源代码之后,我终于找到了 TweakCapabilities() :它需要两组功能来添加和删除,强制执行以下方案;因此适用于 docker-compose.yaml,其中 YAML 没有定义 cap_add
和 cap_drop
键的顺序。下面的第一个匹配项将终止列表。
privileged: true
:完全忽略 cap_add
和 cap_drop
,而是返回 所有可用的功能 。 cap_add
和 cap_drop
都是 空 :返回默认的 Docker 功能集。 cap_add
包含 ALL
:返回所有功能 减去 cap_drop
中列出的功能(忽略后者中的 ALL
)。 cap_drop
包含 ALL
:仅从 cap_add
返回功能,忽略任何 Docker 默认功能。 cap_drop
中列出的默认集合中删除所有能力,然后在 cap_add
中添加能力,最后返回结果。 如果我没记错的话,这也可以用更容易理解的方式表示如下......
privileged: true
所有功能 :忽略
cap_add
和 cap_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
关于Docker-Compose:cap_drop 和 cap_add 的顺序?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/63162665/