docker容器可以在其他docker容器中运行吗?
我在docker spawner中使用jupyterhub,第二种方法是,当用户进入jupyterhub时,它为他运行docker容器。我现在想将jupyterhub内容化,并使用类似的东西:但我的问题是(我是新手)如果jupyterhub在容器中运行并且它生成用户容器,那么这个容器是在第一个容器中运行,还是在我的计算机上单独运行?是的。您需要使用特权模式创建容器,并共享docker套接字。除此之外,您还需要在实际图像中提供docker客户端:docker容器可以在其他docker容器中运行吗?,docker,jupyterhub,Docker,Jupyterhub,我在docker spawner中使用jupyterhub,第二种方法是,当用户进入jupyterhub时,它为他运行docker容器。我现在想将jupyterhub内容化,并使用类似的东西:但我的问题是(我是新手)如果jupyterhub在容器中运行并且它生成用户容器,那么这个容器是在第一个容器中运行,还是在我的计算机上单独运行?是的。您需要使用特权模式创建容器,并共享docker套接字。除此之外,您还需要在实际图像中提供docker客户端: docker run -ti --privileg
docker run -ti --privileged -v /var/run/docker.sock:/var/run/docker.sock <your image>
docker-run-ti--privileged-v/var/run/docker.sock:/var/run/docker.sock
参考资料:是的,这是可能的,通常称为docker中的docker或short dind,不推荐使用(即使是Jérôme Petazzoni贡献了补丁使之成为可能。您可以在中找到更详细的解释。) 但是,如果您只是希望能够从主机上的另一个容器中构建和运行docker容器,则可以将容器设置为“具有docker功能”: 支持docker的容器通常只需要两样东西(docker将从中使用的容器,在您的例子中是jupyterhub容器):
docker run/var/run/docker.sock:/var/run/docker.sock-v
)docker run--name B-v/data:/data debian:stretch ls/data
-->新的容器B在主机上启动,通过容器A启动
-->输出将是test1.txt test2.txt
,因为它仍将在主机上下文中运行,并且主机装载始终指向主机文件系统还要注意的是,通过访问已安装docker套接字的容器,即使不使用--privileged运行支持docker的容器,该容器中docker组的任何用户都可以以根用户身份访问主机。(这仅适用于真正的dind)运行
--privileged
显式允许容器转义,这会破坏容器的安全性,因此不要在生产中这样做。使用主机的Docker后台程序不需要--privileged
;但是如果你可以使用主机的Docker守护进程,那么接管整个主机就很容易了。我习惯于“Docker in Docker”,字面意思是在Docker内部运行Docker–在容器内启动第二个Docker守护进程。我偶尔会看到你在这里描述的(更简单、更常见的)设置被称为“Docker of Docker”,与之形成对比。@DavidMaze你有没有见过关于“Docker of Docker”的官方字面描述?有时候我真的很难用一个词来解释这个解决方案<代码>国防部<代码>码头工人离开码头工人?看起来不专业…@DavidMaze你实际上是对的,我更新了我的答案,以澄清我不是在描述docker中真正的docker。我从未在任何生产工作中使用过real dind,因为它会引起头痛。我想这就是为什么我开始用docker in docker这个名字来称呼你所谓的“docker out of docker”,现在我在回答中称之为“docker capable”。