从Docker容器连接到本地主机上的rabbitmq

我有一个在Docker容器中运行的Java应用程序,以及在本地主机(mac)中运行的rabbitmq。 该应用程序需要与本地主机上的rabbitmq进行通信,有人可以指出我怎么做到这一点?

如果使用--net="bridge" Docker引擎将提供虚拟networking接口作为--net="bridge" 。 这是一个标准值。 在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:/# 

@Giorgio谢谢你的回答,它给我看了正确的地方。 我不能让你的解决scheme与我在Mac上使用Docker一起运行,并且您的解决scheme适用于Linux环境。

Mac上的Docker的Ne​​tworingfunction不支持docker0接口,如https://docs.docker.com/docker-for-mac/networking/中所述

我遵循上述链接中“我想从容器连接到主机上的服务”部分下的给定解决scheme。

在lo0上创build一个别名,并调整rabbitmq.config来监听IP,解决了我的问题。