【问题标题】:Connect to rabbitmq on local host from a Docker container从 Docker 容器连接到本地主机上的 rabbitmq
【发布时间】:2016-12-28 14:51:50
【问题描述】:

我有一个在 docker 容器中运行的 java 应用程序和一个在本地主机 (mac) 中运行的 rabbitmq。该应用程序需要与本地主机上的rabbitmq进行通信,有人能指出我该如何实现吗?

【问题讨论】:

    标签: java docker rabbitmq dockerfile


    【解决方案1】:

    如果您使用--net="bridge",Docker 引擎会提供一个虚拟网络接口作为网关。这是一个标准值。在 linux 上,您可以通过 ifconfig 命令知道接口的名称。

    docker0   Link encap:Ethernet  IndirizzoHW 02:42:56:6c:95:26  
          indirizzo inet:172.17.0.1  Bcast:0.0.0.0  Maschera:255.255.0.0
          indirizzo inet6: fe80::42:56ff:fe6c:9526/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:28267 errors:0 dropped:0 overruns:0 frame:0
          TX packets:25451 errors:0 dropped:0 overruns:0 carrier:0
          collisioni:0 txqueuelen:0 
          Byte RX:52948314 (52.9 MB)  Byte TX:25718113 (25.7 MB)
    

    在我的容器中,我只是使用 172.17.0.1 作为访问主机的网关。

    在您的容器中,您还可以使用route 命令显示路由并查看默认网关是什么

    root@15fae92c516f:/# route
     Kernel IP routing table
     Destination     Gateway         Genmask         Flags Metric Ref    Use      Iface
     default         172.17.0.1      0.0.0.0         UG    0      0        0  eth0
     172.17.0.0      *               255.255.0.0     U     0      0        0  eth0
    root@15fae92c516f:/# 
    

    【讨论】:

    • 请注意,iproute2 现在可以在大多数 linux 中查询网络信息ip link showip address showip route show
    【解决方案2】:

    @Giorgio 感谢您的回答,它向我展示了正确的查看位置。由于我在 Mac 上使用 Docker,而您的解决方案适用于 Linux 环境,因此我无法让它与您的解决方案一起运行。

    Mac 上 Docker 的网络功能不支持 docker0 接口,如 https://docs.docker.com/docker-for-mac/networking/ 中所述

    我按照上述链接的“我想从容器连接到主机上的服务”部分下的给定解决方案。

    在 lo0 上创建别名 并调整 rabbitmq.config 以监听该 IP 解决了我的问题。

    【讨论】:

      猜你喜欢
      • 2017-04-26
      • 2017-06-13
      • 2015-11-28
      • 2018-04-11
      • 1970-01-01
      • 1970-01-01
      • 2020-01-20
      • 2014-08-10
      相关资源
      最近更新 更多