1

我正在尝试让 Docker 用户名称空间与在 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

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

4

1 回答 1

0

当我遇到那个错误时,你的情况比我做的要多,但是这里有!

根据您的 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 文档,如何配置上述文件(必须在 centos/rhel 上为每个文件手动完成)

于 2018-10-30T08:55:49.333 回答