同Docker网络下Spring WebClient通过容器名调用服务报Connection refused
你的报错日志已经明确指向核心问题:请求尝试访问attachment-loader-sec的80端口,但attachment-loader-sec容器内服务监听的是8086端口,HTTP协议默认不带端口时会自动访问80端口,自然会被拒绝。
具体可排查的点:
1. WebClient基础URI缺失端口
你当前配置的BasicUri为http://attachment-loader-sec/list,未指定服务端口,补全容器内服务端口即可解决连接拒绝问题:
修改配置为 http://attachment-loader-sec:8086/list
2. 确认服务监听地址
检查Spring Boot配置是否将服务绑定到0.0.0.0而非127.0.0.1,如果绑定到本地回环地址,容器外(包括同网络其他容器)也无法访问,可在application.yml中添加配置:
server: address: 0.0.0.0
3. 验证容器内端口连通性
你之前仅做了ping验证,只能证明网络层连通,不能证明端口可达,可在attachment-loader-prim容器内执行命令验证端口可达性:curl http://attachment-loader-sec:8086/health 或者 nc -zv attachment-loader-sec 8086
如果返回正常响应,说明端口本身可达,问题完全出在WebClient配置上。
4. 检查路径拼接逻辑
你在BasicUri中配置了/list后缀,后续请求又拼接了/{id}/attachment,最终请求路径会是http://attachment-loader-sec:8086/list/{id}/attachment,如果你的目标接口没有/list前缀,会额外触发404错误,需确认路径是否符合业务预期。
内容的提问来源于stack exchange,提问作者Vladislav Ashikhin

