我正在尝试将Docker容器作为私有(--internal)Docker网络与预定义的host网络之间的路由器运行。这意味着容器需要具有两个网络接口:一个“外部”接口可以访问所有主机IP地址,一个“内部”接口可以充当内部Docker网络中容器的网关。
<路由器容器本身将随后对来自容器的NAT网络流量进行NAT。

我还没有找到一种方法来配置Docker以使用这两个接口运行容器。我能得到的最接近的是分配了两个bridge接口,这并不是我所需要的。

尝试手动连接会导致错误:

# docker network connect host root_router_1
Error response from daemon: Container cannot be disconnected from host network or connected to host network


谁能告诉我如何实现这一目标,最好是连Docker Compose都给我看?

评论

@PunMum不幸的是没有。我们最终将所有容器直接连接到主机网络,并在容器内配置IP。

#1 楼

Docker不允许将容器同时连接到主机网络和任何其他Docker桥接网络。我将尝试通过一个示例来说明原因:


让我们考虑一个容器C1。假设C1将连接到主机网络(--net = host)和Docker桥网络Br1(--net = Br1)。
第二个容器(假设C2)连接到Br1。 br />
通过以上设置,我的猜测是主机网络在C2中可见,我想这就是Docker自动阻止我们无意中将主机网络暴露于非主机指定容器的原因。

话虽如此,如果我们有一组容器,并且希望所有容器相互连接,并且只有一个容器可以访问主机网络,那么我的方法是:


[C2,...,CN]连接到用户定义的Docker桥Br1(--net = Br1)
C1连接到主机网络(--net = host)
C1公开了一个端口,以便可以从其余的容器中访问

编辑:我们仍然必须以这样的方式调整iptables策略,以便可以从其余容器(请参阅https://docs.docker.com/network/iptab les /)

#2 楼

根据github上的问题解答:


主机网络很特殊。您必须使用network_mode:
服务上的主机


评论


如果您需要将某些东西连接到内部网络和主机网络,则network_mode不起作用。我们无法找到解决该问题的好方法,这似乎很疯狂。

– jv-dev
19年11月19日在3:30