我有一个在docker容器中运行的java应用程序和一个在本地主机(mac)中运行的rabbitmq。该应用程序需要与本地主机上的rabbitmq进行通信,有人可以指出我该如何实现这一目标?
答案 0 :(得分:3)
如果您使用--net="bridge"
,Docker引擎会将虚拟网络接口作为getway。这是一个标准值。在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:/#
答案 1 :(得分:2)
@Giorgio感谢您的回答,它给我看了正确的地方。我无法使用您的解决方案运行,因为我在Mac上使用Docker并且您的解决方案适用于Linux环境。
Mac上Docker的Networing功能不支持docker0接口,如https://docs.docker.com/docker-for-mac/networking/中所述
我按照第34节中的给定解决方案;我想从容器连接到主机上的服务"以上链接。
在lo0上创建别名 并调整rabbitmq.config来监听IP解决了我的问题。