特权的docker容器不能删除function?
我正在运行这个
docker run --rm --name mydocker --privileged \ -v /sys:/sys:ro \ -v /dev:/dev \ --stop-signal=SIGRTMIN+3 \ -p 8080:8080 \ -p 5005:5005 \ -p 8443:8443 \ --net=host \ --cap-drop=SYS_BOOT \ /usr/sbin/init
它应该作为init运行systemd并从其中删除SYS_BOOTfunction。 这是彻底closures容器所必需的。 如上所述运行时,它会将systemd init作为pid 1运行,但function不会丢失:
[root@FK8CDFA9A82A9E7-A /]# cat /proc/1/status | grep Cap CapInh: 0000003fffffffff CapPrm: 0000003fffffffff CapEff: 0000003fffffffff CapBnd: 0000003fffffffff CapAmb: 0000000000000000
当SYS_BOOTfunction被删除时,它应该看起来像这样:
CapInh: 0000003fffbfffff CapPrm: 0000003fffbfffff CapEff: 0000003fffbfffff CapBnd: 0000003fffbfffff CapAmb: 0000000000000000
任何想法,为什么这是行不通的? Docker版本:
客户:
版本:1.12.3
API版本:1.24
Go版本:go1.6.3
Git commit:34a2ead
内置:
OS / Arch:linux / amd64
服务器:
版本:1.12.3
API版本:1.24
Go版本:go1.6.3
Git commit:34a2ead
内置:
OS / Arch:linux / amd64
指定–privileged时,不能删除function。 这似乎是一个弱点。 这里是相关的代码: Docker CE Linux OCI
if c.HostConfig.Privileged { caplist = caps.GetAllCapabilities() } else { caplist, err = caps.TweakCapabilities(s.Process.Capabilities.Effective, c.HostConfig.CapAdd, c.HostConfig.CapDrop) if err != nil { return err } }
你为什么要在容器中运行docker-daemon? 如果只是为了控制其他服务,那么docker-systemctl-replacement脚本将是一个更容易的select。