我正在尝试让Docker用户 namespace 与Centos 7.5上启用的SELinux一起使用。但是,我每次都会收到此错误:

docker run -itd --name temp -p 80:80 httpd

1a83588651b407e547881e15190b6d39692a7a2cf2df73dcaf4f37730ebdca65
docker: Error response from daemon: OCI runtime create failed: container_linux.go:348: starting container process caused "process_linux.go:301: running exec setns process for init caused \"exit status 40\"": unknown.

如果我转向SELinux,则不会发生这种情况。

这是我的/etc/docker/daemon.json:
{
"userns-remap": "dockerspace",
"hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2376"],
"tls": true,
"tlscacert": "/etc/pki/tls/certs/docker-ca.pem",
"tlscert": "/etc/pki/tls/certs/docker-cert.pem",
"tlskey": "/etc/pki/tls/private/docker-key.pem",
"tlsverify": true,
"selinux-enabled": true
}

uname -a输出:
Linux atlantis.newtarget.net 3.10.0-862.9.1.el7.x86_64 #1 SMP Mon Jul 16 16:29:36 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

cat / proc / cmdline输出:
BOOT_IMAGE=/vmlinuz-3.10.0-862.9.1.el7.x86_64 root=/dev/mapper/centos-root ro crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet LANG=en_US.UTF-8 namespace.unpriv_enable=1 user_namespace.enable=1

任何帮助是极大的赞赏。谢谢。

最佳答案

您遇到的错误比发生该错误时要多得多,但是可以!

根据cat / proc / cmdline输出,看起来您已经完成了:
sudo grubby --args="namespace.unpriv_enable=1" --update-kernel=/boot/vmlinuz-$(uname -r)您可能需要重新启动才能生效(如果尚未生效)。

您还需要确保/ proc / sys / user / max_user_namespaces中的值至少大于0:
echo 12345 > /proc/sys/user/max_user_namespaces
这些设置以及配置[/etc/subuid、/etc/subgid、/etc/docker/daemon.json]正确地对我启用了selinux。 docker documentation on user namespacing, how to configure the above files (must be done manually for each on centos/rhel)

10-08 09:21