一、问题背景
原先物理机下,UIP 和 BP 部署在同一主机上,UIP 转发请求到 BP 没问题
容器化后,UIP 和 BP 部署在不同的主机上,配置文件相同时,UIP 无法转发请求到 BP
二、问题描述
UIP 容器上 telnet {BP:IP} {BP:PORT} 提示 Connection Refuse
BP 容器上 telnet {BP:IP} {BP:PORT} 提示 Connection Refuse
BP 容器上 telnet 127.0.0.1 {BP:PORT} 能够正常连接
三、相关代码及配置
BP 启动配置文件
<?xml version="1.0" encoding="UTF-8"?>
<uip>
<servers>
<params>
<needFluxControl>true</needFluxControl>
<fluxControlFileDir>/ztesoft/zsmart/webframework/R3.0/bp/flux/</fluxControlFileDir>
</params>
<adapter name="JMXServer" comments="JMXServer" parent="JMXBp" state="1">
<params>
<ip>127.0.0.1</ip>
<port>9288</port>
</params>
</adapter>
<adapter name="MockBPServer" parent="BP" required="1" state="1">
<params>
<ip>127.0.0.1</ip>
<port>18999</port>
</params>
</adapter>
</servers>
</uip>
四、排查思路
1. 容器不互联
UIP 容器上 ping BP 容器可以正常通信
2. 端口未开放
切换端口未 9888 后仍然无法 telnet 正常连接
五、问题原因
127.0.0.1
在IPV4 地址中,127 开头的都属于回环地址,也是 IPV4 的特殊地址,而127.0.0.1是众多回环地址中的一个
在IPV4下的回环地址是 127.0.0.1,在IPV6下,表达为 ::1
回环地址只能监听来自本机地址的请求
localhost
localhost 不是 IP,它是一个域名,代表着本机地址,默认会经过 /etc/hosts 文件解析成 127.0.0.1
localhost 是不经网卡传输,不受网络防火墙和网卡相关的的限制。
0.0.0.0
0.0.0.0 最特殊的一个ip地址,不能ping通,代表本机所有的IP地址的集合
如果监听本机的0.0.0.0,就等于监听机器上的所有ip
本机IP
六、问题修复
将配置文件中的 127.0.0.1 变更为 0.0.0.0