Docker环境下WebClient实现REST API服务通信报错排查
问题解决:Docker容器间WebClient通信连接拒绝
问题原因
在Docker容器内部,localhost指向容器自身而非宿主机。你的backend容器尝试访问localhost:8081时,实际是在访问自身容器的8081端口,而mock-bank服务运行在另一个独立容器中,因此出现连接拒绝错误。
解决方案
修改backend服务中WebClient的请求地址,使用docker-compose配置里的服务名(或容器名)替代localhost——同一Docker网络内的服务可通过服务名直接完成DNS解析通信。
修改后的代码
public Client getBankClient(long id) { Client client = webClientBuilder.build() .get() .uri("http://mock-bank:8081/api/clients/" + id) .retrieve() .bodyToMono(Client.class) .block(); return client; }
补充说明
- 你的
backend和mock-bank服务都加入了platform-network网络,Docker Compose会自动为该网络内的服务提供DNS解析,直接使用服务名mock-bank就能定位到对应容器。 - 容器间通信走内部网络,无需使用宿主机映射的端口(8081),直接用容器内部的服务端口即可。
depends_on仅控制容器启动顺序,不保证mock-bank服务完全就绪。如果需要确保服务启动后再发起请求,可以为mock-bank添加健康检查配置。
内容的提问来源于stack exchange,提问作者Александр Гладун
相关产品推荐
相关产品推荐

