docker 对接器-组成:删除上限和添加上限的顺序?

pn9klfpd  于 2023-03-17  发布在  Docker
关注(0)|答案(1)|浏览(143)

docker合成文件参考以相当简洁的方式描述了cap_addcap_drop元素:
添加或删除容器功能。有关完整列表,请参阅man7功能。
这些元素是否有顺序,即先添加,后删除?或者顺序是否重要(YAML中的字典是否支持这种顺序?)
cap_addcap_drop中的一个包含ALL时会发生什么?
我知道Docker Linux的默认功能集,在www.example.com中定义https://github.com/moby/moby/blob/master/oci/caps/defaults.go#L4。

r1zhe5dt

r1zhe5dt1#

在浏览了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中列出的默认集合中删除所有capabilites,然后添加cap_add中的capabilites,最后返回结果。

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

| privileged: true|
| - ------|
|所有功能:忽略cap_addcap_drop(凸台模式)|
| | 无cap_add|x1米20英寸1x|cap_add: ['ALL']|
| - ------|- ------|- ------|- ------|
|cap_drop|默认能力|默认值+CAP_A|所有功能|
|一米二十四分一x|默认值-CAP_Z|默认值-CAP_Z + CAP_A|全部-CAP_Z|
|一米二十九纳一x|无功能|x1米30英寸1x|所有功能|
最后,只有以下两个“确定性”组合始终包含cap_drop: ALL,并且遵循最低特权行:

| | 无cap_add|cap_add: ['CAP_A']||
| - ------|- ------|- ------|- ------|
| | | | |
| | | | |
|一米三四米一x|无功能|CAP_A||

相关问题