在docker中使用docker时如何共享主机网桥



我使用https://github.com/jpetazzo/dind docker图像在docker中有docker。在父docker内部启动docker容器时,是否可以使用父docker的桥,以便我可以在docker容器和父docker容器内部的容器之间共享网络?

我想做的是直接从主机通过IP访问父docker容器内的容器,并为它们分配域名。

UPDATE ->主旨思想

我正在升级一个免费的在线Java编译器,允许用户使用docker运行任何程序。所以我使用dind (docker镜像中的docker)来启动一个主容器,该容器内部有一个Java程序,该程序接收请求并在其中启动docker容器。因此,我想做的是让用户可以选择运行公开端口的程序,并允许他们使用子域访问他们的容器。从图形上看,我有这个层次

Internet -> My Host -> Main Docker Container -> User Docker Container 1
                                             -> User Docker Container 2
                                             -> User Docker Container n

我想做的是给用户一个子域名访问他的"用户Docker容器"例如:www.user_25.compiler1.browxy.com

所以他可以有一个程序,在他的"用户Docker容器"中公开一个端口,并可以使用子域www.user_25.compiler1.browxy.com访问它

让我困惑的是,要访问"用户Docker容器",我需要在主Docker容器之前访问。我试图找到一种直接访问"用户Docker容器"的方法,所以我认为,如果用户Docker容器和主Docker容器可以共享同一个网络,我可以直接从主机访问用户Docker容器,并为"用户Docker容器"IP分配一个域名,更新主机上的/etc/hosts文件。

非常感谢您的任何意见或建议:)

最后我接受了larsks给我的许多想法,这就是我所做的

  1. 在docker容器中使用名称(——name compiler)启动docker
  2. 在host -> sudo route add -net 10.0.0.0 gw docker inspect --format '{{ .NetworkSettings.IPAddress }}' compiler netmask 255.255.255.0
  3. 中执行该命令
我在docker容器中的docker中添加了一个自定义桥接,以确保ip范围为10.0.0.0/24

现在我可以从主机上ping在docker容器中创建的容器

为了获得名称解析,我按照larsks的建议将docker-dns安装到docker容器中的docker中,并将其IP添加到主机

的/etc/resolv.conf中。

结果是,从主机上我可以通过名称访问在docker容器中创建的容器。

我想做的一个可能的升级是用docker配置所有内容而不添加自定义内容到主机中但现在我不知道怎么做我可以用这个解决方案

如果您使用--net=host运行"主docker容器",那么您的配置简化为:

Internet -> Host -> User Docker Container 1
                 -> User Docker Container 2
                 -> User Docker Container n

虽然你可能想使用docker0以外的桥接子容器(例如,创建一个新的桥接docker1,并使用-b docker1启动你的dind Docker守护进程)。

如果两个用户试图在相同ip地址的相同端口上发布服务,那么是的,您将出现端口冲突。有几种方法可以解决这个问题:

  1. 如果您可以在您的主机上支持多个公共ip地址,那么您可以为每个容器"分配"(在引号中,因为这不是自动的)一个。与运行docker run -p 80:80 ...不同,您需要显式地设置绑定ip,就像docker run -p 80:80:1.2.3.4一样。这就要求人们"友好相处";也就是说,没有什么可以防止某人忘记指定绑定地址或指定错误的地址。

  2. 如果您显式地运行web服务,那么您可以使用某种类型的前端代理将子域名映射到使用基于名称的虚拟主机的容器。这个过程有几个组件,使它自动化可能需要一点工作。手动操作相对容易(例如,只需更新/etc/hosts),但是很脆弱,因为当容器重新启动时,它将有一个新的ip地址。动态dns服务可以帮助解决这个问题。

这些大多是建议而不是解决方案,但如果你想了解更多细节,请告诉我。可能还有其他方法可以解决这个问题,所以希望有人能加入进来。

最新更新