【问题标题】:Use multiple specific network interfaces with docker swarm通过 docker swarm 使用多个特定的网络接口
【发布时间】:2019-11-18 02:30:04
【问题描述】:

我正在使用 docker swarm 部署本地第三方应用程序。我正在部署的机器运行的是 RHEL 7.6,并且有两个网络接口。用户将从eth0 与应用程序进行交互,但与他们的系统的内部通信必须使用eth1 否则连接将被他们的防火墙阻止。我的应用程序需要我的一些服务在其网络中建立连接内部服务。

我使用以下方法创建了我的群:

$ docker swarm init --advertise-addr x.x.x.x

其中x.x.x.xeth0 inet 地址。这适用于服务的传入用户流量。但是,当我尝试与其他服务建立连接时,连接超时,被防火墙阻止。

在docker之外,在机器上,我可以运行:

ssh -b y.y.y.y user@server

其中y.y.y.yeth1 inet 地址,它可以工作。当我在我的 docker swarm 容器中运行相同的程序时,我收到了这个错误:

绑定:y.y.y.y:无法分配请求的地址

有没有什么方法可以让 docker swarm 使用多个网络接口,并指定在容器中使用哪一个?我找不到太多关于此的文档。我需要设置某种代理吗?

【问题讨论】:

  • 为什么不使用docs.docker.com/v17.09/engine/swarm/networking/…中提到的--data-path-addr
  • 不幸的是,我正在尝试在两个节点之间进行连接。它们都可以完全独立运行,连接只是一个非阻塞的后台进程。如果我让它们成为同一个群体的一部分,如果其中一个倒下,它们都会倒下。有没有办法改变这种行为?我知道这不是一个好的设置,但我真的别无选择。

标签: linux docker networking docker-swarm rhel


【解决方案1】:

默认情况下,Docker 从您机器上的网络接口创建一个桥接网络,然后通过内部单独的虚拟接口将每个容器实例附加到它。因此,您将无法直接绑定到 eth1,因为您的 Docker 容器具有不同的接口。

有关一般指南,请参阅 https://docs.docker.com/v17.09/engine/userguide/networking/,有关具有多个物理接口的自定义桥接网络,请参阅 https://docs.docker.com/v17.09/engine/userguide/networking/default_network/custom-docker0/

【讨论】:

    猜你喜欢
    • 2022-08-19
    • 2018-12-24
    • 2019-01-08
    • 1970-01-01
    • 1970-01-01
    • 2020-06-11
    • 1970-01-01
    • 2019-02-14
    • 1970-01-01
    相关资源
    最近更新 更多