我正在使用jupyterhub和docker spawner,第二个做的是,当用户进入jupyterhub时,它会为他运行docker容器。我现在想把jupyterhub写成这样:https://hub.docker.com/r/jupyterhub/jupyterhub/,但我的问题是(我是新手)如果jupyterhub在容器中运行,它会产生用户容器,这个容器是在第一个容器中运行,还是在我的计算机上独立运行?
发布于 2020-10-21 04:42:23
是。您将需要使用特权模式创建容器,并共享docker套接字。除此之外,您还需要在实际镜像中提供docker客户端:
docker run -ti --privileged -v /var/run/docker.sock:/var/run/docker.sock <your image>发布于 2020-10-21 05:06:50
是的,这是可能的,通常在docker或short dind中称为docker,并不推荐(甚至由贡献了补丁使其成为可能的杰罗姆·佩塔佐尼)。你可以在his blog post中找到更长的解释。)
然而,如果你只是想在你的主机上的另一个容器中构建和运行docker容器,你可以让你的容器"docker capable":
对于支持docker的容器,它通常只需要两件事(要使用docker的容器,在本例中是jupyterhub容器):
docker client必须安装在容器中(例如:docker run /var/run/docker.sock:/var/run/docker.sock -v <image>)
中
注意,支持停靠的容器没有自己的停靠守护进程。它只能使用主机停靠守护进程,这意味着在具有停靠功能的容器和任何停靠容器(从主机和支持停靠的容器开始)中不会有另一个“停靠器层”在您的主机的相同上下文中运行。
这意味着您不会获得任何额外的隔离,这可能会令人困惑,尤其是当您使用主机挂载时。考虑这个例子:
docker run --name B -v /data:/data debian:stretch ls /data -->通过容器A启动一个新的容器B -->输出将为test1.txt test2.txt,因为它仍将在您的主机上下文中运行,并且主机装载始终引用您的主机文件系统。还要注意,拥有对装载了docker socket的容器的访问权限将为该容器中的docker组中的任何用户提供对主机的相当大的root访问权限,即使没有使用--特权运行支持docker的容器也是如此。(只有真正的dind才需要)
https://stackoverflow.com/questions/64452953
复制相似问题