我的 dockerd(CentOS7:17.12.0-ce,构建 c97c6d6)正在运行,并启用了用户命名空间以实现更好的隔离。
现在我构建了一个镜像,该镜像也应该从内核的 /proc 读取以进行监控。因此我尝试将 /proc 挂载到容器中的 /host/proc 上
host> docker run --network=host --userns=host --pid=host --privileged -v /proc:/host/proc:ro --name mycontainer my/container20180204
并在容器启动期间通过容器 proc 命名空间视图进行绑定挂载
docker> mount -o bind /host/proc /proc
但是,即使使用主机的用户命名空间,容器的根进程显然也在 dockerd 的用户命名空间映射中运行,因为容器的根进程无法绑定挂载 /proc
mount: only root can use "--options" option (effective UID is 100000)
以非特权用户身份运行不起作用,因为它会尝试从各层将其挂载为真实文件系统(?!?)
/var/lib/docker/100000.100000/btrfs/subvolumes/${SHA256}/proc\\\\\\\" cannot be mounted because it is located inside \\\\\\\"/proc\\\\\\\"\\\"\"": unknown.
所以,我担心用户命名空间的限制是永久的并且不可绕过……? https://docs.docker.com/engine/security/userns-remap/#user-namespace-known-limitations