我正在使用docker swarm部署内部部署的第三方应用程序。我要部署的计算机正在运行RHEL 7.6,并且具有两个网络接口(interface)。用户将通过eth0
与应用程序进行交互,但是与其系统的内部通信必须使用eth1
,否则连接将被其防火墙阻止。我的应用程序需要我的一些服务才能在其网络中建立连接内部服务。
我使用以下方法创建了群集:
$ docker swarm init --advertise-addr x.x.x.x
其中
x.x.x.x
是eth0
inet地址。这适用于服务的传入用户流量。但是,当我尝试建立与另一服务的连接时,连接被防火墙阻止而超时。在docker之外,在机器上,我可以运行:
ssh -b y.y.y.y user@server
其中
y.y.y.y
是eth1
inet地址,它可以正常工作。当我在docker swarm容器中运行相同命令时,出现以下错误:有什么办法可以在docker swarm中使用多个网络接口(interface)并指定在容器中使用哪个接口(interface)?我找不到太多的文档。我需要设置某种代理吗?
最佳答案
默认情况下,Docker从您机器上的网络接口(interface)创建桥接网络,然后通过内部的单独虚拟接口(interface)将每个容器实例附加到该网络。因此,您将无法直接绑定(bind)到eth1,因为您的Docker容器具有不同的接口(interface)。
有关一般指南,请参见https://docs.docker.com/v17.09/engine/userguide/networking/;对于具有多个物理接口(interface)的自定义桥接网络,请参见https://docs.docker.com/v17.09/engine/userguide/networking/default_network/custom-docker0/。