【发布时间】:2016-12-28 14:51:50
【问题描述】:
我有一个在 docker 容器中运行的 java 应用程序和一个在本地主机 (mac) 中运行的 rabbitmq。该应用程序需要与本地主机上的rabbitmq进行通信,有人能指出我该如何实现吗?
【问题讨论】:
标签: java docker rabbitmq dockerfile
我有一个在 docker 容器中运行的 java 应用程序和一个在本地主机 (mac) 中运行的 rabbitmq。该应用程序需要与本地主机上的rabbitmq进行通信,有人能指出我该如何实现吗?
【问题讨论】:
标签: java docker rabbitmq dockerfile
如果您使用--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:/#
【讨论】:
ip link showip address showip route show
@Giorgio 感谢您的回答,它向我展示了正确的查看位置。由于我在 Mac 上使用 Docker,而您的解决方案适用于 Linux 环境,因此我无法让它与您的解决方案一起运行。
Mac 上 Docker 的网络功能不支持 docker0 接口,如 https://docs.docker.com/docker-for-mac/networking/ 中所述
我按照上述链接的“我想从容器连接到主机上的服务”部分下的给定解决方案。
在 lo0 上创建别名 并调整 rabbitmq.config 以监听该 IP 解决了我的问题。
【讨论】: