首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Docker:从“网桥网络容器”到主机网络容器的通信

Docker:从“网桥网络容器”到主机网络容器的通信
EN

Stack Overflow用户
提问于 2020-08-17 22:17:03
回答 1查看 53关注 0票数 1

我的目标

我有一个web前端应用程序,它通过一个特定的端口(REST API)与一个后端应用程序(让我们称之为"My_App")进行通信。My_App需要发送多播帧才能与外部世界通信。我需要把所有东西都放到Docker容器中。

我尝试过(但失败了)

首先,我尝试将nginx和应用程序放在一个容器中,使用主机网络连接整个容器。如下图所示:

这在我的开发PC上有效,但在目标系统上无效,因为一些防火墙规则阻止我从目标系统外部访问Port8081和12345。如果我登录到目标系统,例如通过ssh,我可以很好地访问这些端口。所以目标系统上的情况是这样的:

我想要实现的目标

因此,现在我尝试将应用程序和nginx拆分到单独的容器中(主机系统允许桥接网络的端口映射,我可以从外部访问映射的端口)。

我想做的是将一个使用网桥网络的Container A与另一个使用主机网络的Container B连接起来,这样Container A中的一个应用程序(例如,作为反向代理的Nginx )就可以在特定的端口上向Container B发送请求。如下图所示:

但现在我不知道如何实现这一点。我知道,如果两个容器都使用桥接网络,我可以通过使用Dockers DNS和每个容器的名称在容器之间进行通信。但是,如果一个容器使用主机网络,绕过Dockers DNS,该如何做到这一点?

这是我当前的docker-compose文件:

代码语言:javascript
复制
version: "2"
services:
  Container_B:
    image: my_app
    network_mode: host
  
  Container_A:
    image: nginx:alpine
    ports: 
      - 80:8081
      - 12342:12342  // apparently does not work because in use by Container_B
    depends_on:
      - "Container_B"

实际的问题

是否可以使用主机网络从使用网桥网络的Container_B中访问Container_A中的端口?而不需要一些外部应用程序进行路由?

EN

回答 1

Stack Overflow用户

发布于 2020-09-08 14:32:42

如果你使用的是Mac或Windows,你可以使用host.docker.internal连接到network_mode: 'host'中的容器。

对于linux,此功能还不可用。它将在新版本的docker中可用。在此之前,您可以使用docker镜像dockerhost (docker pull qoomon/docker-host),并使用dockerhost:{port}方法在主机模式下连接到容器。

在您的docker-compose.yml文件中添加以下内容:

代码语言:javascript
复制
dockerhost:
      image: qoomon/docker-host
      cap_add:
        - NET_ADMIN
        - NET_RAW
      restart: on-failure
      networks:
        - back_end

Container_A也应该与dockerhost在同一网络中。

在此之后,您可以使用dockerhost:{port}从桥接网络内连接到主机模式下的容器,其中port是主机中的容器正在侦听的地方。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63452752

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档