连接JMeter Slave Docker容器时出现Connection refused错误如何解决
根因定位
报错中Slave尝试连接的172.17.0.2是Docker容器默认桥接网络的内部IP,跨主机场景下,Master节点未配置自身可被外部访问的RMI地址,返回给Slave的回调地址为自身容器内部IP,Slave跨主机无法访问该地址,而同主机场景下容器内部IP互通所以运行正常。
排查&解决步骤
- 补充Master节点RMI主机名配置
你当前的Master启动命令中缺少java.rmi.server.hostname参数,这是问题核心。需在Master启动命令中添加该参数,值为Master所在EC2的可被Slave访问的公网IP/同VPC私网IP,修正后的启动命令示例如下:docker run \ -v "${volume_path}":${jmeter_path} \ -p 3000:3000 \ --rm \ jmeternew \ -n -X \ -t ${jmeter_path}/$1 \ -Dserver.rmi.ssl.disable=true \ -Dclient.rmi.localport=3000 \ -Djava.rmi.server.hostname=<Master所在EC2的可访问IP> \ -R slaveIP:1099 \ -l ${jmeter_path}/client/result_${timestamp}.jtl \ -j ${jmeter_path}/client/jmeter_${timestamp}.log - 验证端口连通性
确认EC2安全组、宿主机防火墙已双向放行以下端口:- Master侧
3000端口:允许Slave节点IP访问 - Slave侧
1099、6000端口:允许Master节点IP访问
可通过nc命令验证连通性:nc -zv <对端IP> <端口号>
- Master侧
- 修正Slave节点RMI配置
Slave节点的-Djava.rmi.server.hostname参数需填写Slave所在EC2的可被Master访问的公网/私网IP,不可设置为0.0.0.0,该配置无法对外暴露正确的可访问地址。 - 可选:使用host网络模式
如果仍存在网络连通问题,可在Docker启动命令中添加--net=host参数,容器直接复用宿主机网络,规避Docker NAT转换导致的IP识别问题,使用该模式时可删除原有端口映射配置。
内容的提问来源于stack exchange,提问作者Svp57
相关产品推荐
相关产品推荐

