docker compose file reference 以一种相当简洁的方式描述了 cap_addcap_drop 元素:

这些元素是否有顺序,即先添加后删除?或者顺序是否重要(YAML 中是否完全支持字典?)?
cap_addcap_drop 之一包含 ALL 时会发生什么?
我知道 https://github.com/moby/moby/blob/master/oci/caps/defaults.go#L4 中定义的 Docker Linux 默认功能集。

最佳答案

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

  • 容器是 privileged: true :完全忽略 cap_addcap_drop,而是返回 所有可用的功能
  • cap_addcap_drop 都是 :返回默认的 Docker 功能集。
  • cap_add 包含 ALL :返回所有功能 减去 cap_drop 中列出的功能(忽略后者中的 ALL)。
  • cap_drop 包含 ALL :仅从 cap_add 返回功能,忽略任何 Docker 默认功能。
  • default:首先从 cap_drop 中列出的默认集合中删除所有能力,然后在 cap_add 中添加能力,最后返回结果。

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

    privileged: true

    所有功能 :忽略 cap_addcap_drop(老板模式)




    没有cap_addcap_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_addcap_add: ['CAP_A']








    cap_drop: ['ALL']
    无能力 CAP_A

    关于Docker-Compose:cap_drop 和 cap_add 的顺序?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/63162665/

    10-14 03:37