如何通过Docker Engine API创建拥有NET_ADMIN权限的Docker Swarm服务
解决方案:为Docker Swarm服务添加NET_ADMIN权限
你可以通过以下两种方式实现需求:
1. 直接在ContainerSpec的CapabilityAdd中指定CAP_NET_ADMIN
虽然Docker Engine API v1.43的Swarm服务创建文档只列举了4种能力,但实际上该字段支持所有合法的Linux内核能力(需带CAP_前缀)。你可以直接在请求体的ContainerSpec.CapabilityAdd数组中添加"CAP_NET_ADMIN",示例API请求体如下:
{ "Spec": { "TaskTemplate": { "ContainerSpec": { "Image": "your-iproute2-image:latest", "CapabilityAdd": ["CAP_NET_ADMIN"] }, "RestartPolicy": { "Condition": "any" } }, "Mode": { "Replicated": { "Replicas": 1 } } } }
这种方式是最安全的,仅授予容器所需的网络管理权限,符合最小权限原则。
2. 使用特权模式(仅建议测试环境)
如果上述方法因特殊环境限制无法生效,可以开启容器的特权模式,这会授予容器主机的所有权限(包括NET_ADMIN)。在请求体的ContainerSpec中添加"Privileged": true即可:
{ "Spec": { "TaskTemplate": { "ContainerSpec": { "Image": "your-iproute2-image:latest", "Privileged": true } } } }
注意:特权模式会带来较大的安全风险,仅在测试或可控环境中使用。
补充说明
容器创建API中的HostConfig.CapAdd与Swarm服务API中的ContainerSpec.CapabilityAdd作用一致,都是为容器添加Linux内核能力,只是Swarm服务的文档仅列举了常用能力,并非支持的全部范围。
内容的提问来源于stack exchange,提问作者Travis
相关产品推荐
相关产品推荐

