docker合成文件参考以相当简洁的方式描述了cap_add
和cap_drop
元素:
添加或删除容器功能。有关完整列表,请参阅man7功能。
这些元素是否有顺序,即先添加,后删除?或者顺序是否重要(YAML中的字典是否支持这种顺序?)
当cap_add
或cap_drop
中的一个包含ALL
时会发生什么?
我知道Docker Linux的默认功能集,在www.example.com中定义https://github.com/moby/moby/blob/master/oci/caps/defaults.go#L4。
1条答案
按热度按时间r1zhe5dt1#
在浏览了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
中列出的默认集合中删除所有capabilites,然后添加cap_add
中的capabilites,最后返回结果。如果我没记错的话,这也可以用一种更容易理解的方式表示如下......
|
privileged: true
|| - ------|
|所有功能:忽略
cap_add
和cap_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
||