我正在将jupyterhub与docker spawner一起使用,第二个功能是,当用户输入jupyterhub时,它将为他运行docker容器。我现在想对jupyterhub进行增容,并使用类似以下的命令:https://hub.docker.com/r/jupyterhub/jupyterhub/,但我的问题是(我是新来的)如果jupyterhub在容器中运行并且生成了用户容器,那么该容器是否在第一个容器中运行一个,还是与我的计算机分开?
答案 0 :(得分:0)
是的。您将需要使用特权模式创建容器,并共享docker套接字。除此之外,您还需要在实际映像中使用docker客户端:
docker run -ti --privileged -v /var/run/docker.sock:/var/run/docker.sock <your image>
答案 1 :(得分:0)
是的,这是可能的,通常在docker或简称中被称为docker,不建议这样做(即使是JérômePetazzoni贡献了补丁使之成为可能。您可以在his blog post中找到更长的解释。)
但是,如果仅希望能够从主机上的另一个容器中构建和运行Docker容器,则可以使容器具有“ Docker能力”:
对于支持docker的容器,通常只需要两件事(将要使用docker的容器,在您的情况下为jupyterhub容器):
docker run /var/run/docker.sock:/var/run/docker.sock -v <image>
)请注意,支持docker的容器没有其自己的docker守护程序。它将只能使用hosts docker守护程序,这意味着在其内部不会再有另一个“ docker层”支持docker的容器和任何docker容器(从主机和支持docker的容器开始)都在与主机相同的上下文中运行。
这意味着您将不会获得任何其他隔离,并且这可能会造成混乱,尤其是在使用主机挂载的情况下。考虑以下示例:
docker run --name B -v /data:/data debian:stretch ls /data
->通过容器A在主机上启动了一个新的容器B
->输出将为test1.txt test2.txt
,因为它仍将在您的主机上下文中运行,并且主机装载始终引用您的主机文件系统。还请注意,即使没有使用--privileged运行具有docker功能的容器,也可以访问安装了docker套接字的容器,从而使该容器中的docker组中的任何用户都可以对您的主机进行根访问。 (只有真正的食物才需要)