特权 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 将是一个更容易的选择。
我运行宁此
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 将是一个更容易的选择。