特权 docker 容器不能删除功能?

privileged docker container cannot drop capabilities?

我运行宁此

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

哪个应该 运行 systemd 作为 init 并从中删除 SYS_BOOT 功能。这是容器干净关闭所必需的。当运行如上时,它会运行 systemd init as pid 1,但capability并没有被删除:

[root@FK8CDFA9A82A9E7-A /]# cat /proc/1/status  | grep Cap  
CapInh: 0000003fffffffff
CapPrm: 0000003fffffffff
CapEff: 0000003fffffffff
CapBnd: 0000003fffffffff
CapAmb: 0000000000000000

当 SYS_BOOT 能力被删除时,它应该看起来像这样:

CapInh: 0000003fffbfffff
CapPrm: 0000003fffbfffff
CapEff: 0000003fffbfffff
CapBnd: 0000003fffbfffff
CapAmb: 0000000000000000

知道为什么这不起作用吗? Docker版本:

客户:
版本:1.12.3
API版本:1.24
转版本:go1.6.3
Git 提交:34a2ead
建成:
OS/Arch: linux/amd64

服务器:
版本:1.12.3
API版本:1.24
转版本:go1.6.3
Git 提交:34a2ead
建成:
OS/Arch: linux/amd64

指定 --privileged 时不能删除功能。这似乎是一个弱点。这是相关代码: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 script 将是一个更容易的选择。