Docker容器间连接被拒绝问题求助(MacOS开发环境)
解决容器间连接被拒绝的问题
核心问题定位
你的错误根源在于容器间通信使用了主机映射端口而非容器内部端口:
- 在
docker-compose.yml中,service-2的端口配置是"8080:8443",这表示把主机的8080端口转发到容器内部的8443端口。 - 但你在
service-1里调用的是http://service-2:8080/buy,容器间通信直接访问服务名时,应该使用容器内部监听的端口(8443),而非主机映射的端口(8080)。
修复步骤
修正service-1中的调用地址
将请求地址改为:http://service-2:8443/buy验证service-2的监听端口
确保service-2的Go代码确实在监听容器内部的8443端口,比如:http.ListenAndServe(":8443", router)注意不要写成
localhost:8443,否则容器内的服务只能被本地访问,无法被其他容器调用。检查服务启动状态
运行以下命令确认service-2是否正常启动:docker-compose logs service-2如果服务启动失败,根据日志排查代码或依赖问题。
确认Docker网络连通性
Docker Compose会自动创建默认网络,两个服务默认在同一网络内,可通过以下命令测试连通性:docker-compose exec service-1 curl http://service-2:8443/buy如果这个命令能成功返回结果,说明网络和服务本身没问题,问题出在
service-1的代码调用逻辑上。
额外提示
- 容器间通信不需要依赖主机端口映射,即使去掉
ports配置,只要在同一Docker网络内,服务间依然可以互相访问。 - 代码中要添加错误处理逻辑,避免因请求失败导致空指针 panic(比如检查响应是否为nil后再处理)。
内容的提问来源于stack exchange,提问作者Krishna Pramod
相关产品推荐
相关产品推荐

