Docker容器可以在其他Docker容器中运行吗?

问题描述

我正在将jupyterhub与docker spawner一起使用,第二个功能是,当用户输入jupyterhub时​​,它将为他运行docker容器。我现在想对jupyterhub进行增容,并使用类似以下的命令:https://hub.docker.com/r/jupyterhub/jupyterhub/,但我的问题是(我是新来的)如果jupyterhub在容器中运行并且生成用户容器,那么该容器是否在第一个容器中运行一个,还是与我的计算机分开?

解决方法

是的。您将需要使用特权模式创建容器,并共享docker套接字。除此之外,您还需要在实际映像中使用docker客户端:

docker run -ti --privileged -v /var/run/docker.sock:/var/run/docker.sock <your image>

参考:https://itnext.io/docker-in-docker-521958d34efd

,

是的,这是可能的,通常在docker或简称中被称为docker,不建议这样做(即使是JérômePetazzoni贡献了补丁使之成为可能。您可以在his blog post中找到更长的解释。)

但是,如果仅希望能够从主机上的另一个容器中构建和运行Docker容器,则可以使容器具有“ Docker能力”:

对于支持docker的容器,通常只需要两件事(将要使用docker的容器,在您的情况下为jupyterhub容器):

  1. 必须将docker套接字安装在容器中(例如:docker run /var/run/docker.sock:/var/run/docker.sock -v <image>
  2. 必须将docker-cli(docker客户端)安装在docker容器中

请注意,支持docker的容器没有其自己的docker守护程序。它将只能使用hosts docker守护程序,这意味着在其内部不会再有另一个“ docker层”支持docker的容器和任何docker容器(从主机和支持docker的容器开始)都在与主机相同的上下文中运行。

这意味着您将不会获得任何其他隔离,并且这可能会造成混乱,尤其是在使用主机挂载的情况下。考虑以下示例:

  1. 您的主机上的文件夹/ data包含文件test1.txt和test2.txt
  2. 容器A是一个具有docker功能的容器,具有/ data文件夹以及文件test3.txt和test4.txt(容器A没有任何主机安装的卷)
  3. 您从容器A中执行docker run --name B -v /data:/data debian:stretch ls /data ->通过容器A在主机上启动了一个新的容器B ->输出将为test1.txt test2.txt,因为它仍将在您的主机上下文中运行,并且主机装载始终引用您的主机文件系统。

还请注意,即使没有使用--privileged运行具有docker功能的容器,也可以访问安装了docker套接字的容器,从而使该容器中的docker组中的任何用户都可以对您的主机进行根访问。 (只有真正的食物才需要)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...