【问题标题】:How do I create a container with multiple network interfaces for different functions?如何为不同功能创建具有多个网络接口的容器?
【发布时间】:2022-03-14 15:00:55
【问题描述】:

我找不到最好的答案,因此我在这里发布我的问题。

如何创建具有多个网络接口的容器?

  • 第一个网络公开端口,以便其他人可以访问;
  • 容器需要访问网关设备的第二个网络;
                       -------------------     -----------------------
 -----------      .---| port:3000 exposed |---| host / lan can access |
| container |----<     -------------------     -----------------------
 -----------      '_   -------------------     -----------------------
                    '-| 192.168.1.0/24    |---| access to 192.168.1.1 |
                       -------------------     -----------------------

我的主机上至少有 3 个网络接口,wlan0、eth0、eth1(usb-lan 适配器)。

我在 eth1 上连接了网关。 eth0 是我需要暴露容器端口的地方。 wlan0 用​​于通过 ssh 管理主机。

这在容器内可能吗? 我对 docker 或 docker-compose 解决方案持开放态度。

【问题讨论】:

  • 一般来说,您对 Docker 的网络设置没有这种级别的控制。一个容器有一个网络接口,您可以将特定端口发布到特定主机接口,但仅此而已。似乎ports: 的正确组合可能能够完成您所描述的操作,但这完全是容器外的(非编程)配置。
  • 我至少可以在 1 个界面上完成这项工作吗?我也许可以使用一个接口,然后从主机运行代理服务器以将请求转发到容器...
  • 您是否有现有的 Compose 设置(带有 ports:)或 docker run 命令(带有 -p 选项)?默认情况下,这些选项会将指定的容器端口发布到所有主机接口,但您可以对其进行限制,这不会影响容器本身具有的(人工)网络接口;你能用它来实现你的目标吗?

标签: docker docker-compose


【解决方案1】:

我将把它标记为答案,因为在当前版本的 docker / docker-compose 中没有办法做到这一点。

无论如何,我解决这个问题的方法不是使用网络接口,而是创建了一个简单的 systemd 服务,例如。我需要向网关发送命令,所以我制作了一个在后台运行的简单脚本,并读取在主机和容器之间共享的公共文件。这是可能的,因为我们可以挂载卷并共享该文件。 CONTAINER 将写入文件“SEND”,然后 HOST 可以读取它并执行命令,当它完成该任务时,HOST 将更新文件并写入“DONE”。

这个机制似乎可以满足我的需要。

PS。我不知道在这个过程中调用什么,latch-release,idk,但我有兴趣学习这种概念。 聚苯乙烯。希望 docker 以后会有更新以支持多个网络接口。

【讨论】:

    【解决方案2】:

    你可以使用多个-p:

    -p WANIP:PORT:CONTAINERPORT/tcp -p INTERNALIP:PORT:CONTAINERPORT

    【讨论】:

      猜你喜欢
      • 2017-03-30
      • 2016-03-10
      • 2021-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-10
      • 1970-01-01
      相关资源
      最近更新 更多