同一Docker网络中容器间连接被拒绝问题求助
问题分析与解决思路
核心问题
你遇到的连接拒绝错误,本质是容器内的localhost指向容器自身,而非宿主机。当document_core容器发起http://localhost:60100请求时,它是在尝试访问自己容器的60100端口,而不是宿主机映射到documentdata容器的端口。Docker Compose默认会为所有服务创建一个共享网络,服务名可直接作为域名解析到对应容器的IP。
解决步骤
1. 修正服务间请求地址
将document_core中指向documentdata的请求地址,从http://localhost:60100改为http://documentdata:80:
documentdata是docker-compose中定义的服务名,同一网络内可直接解析80是documentdata容器内部暴露的端口(而非宿主机映射的60100)
2. 检查配置变量(若有)
如果document_core通过环境变量或配置文件存储documentdata的地址,确保配置值为http://documentdata:80。比如可以在document_core的服务定义中添加环境变量:
services: document_core: # 其他配置... environment: - documentdata_endpoint=http://documentdata:80
3. 验证网络连通性
进入document_core容器内部,测试与documentdata的连通性:
# 进入document_core容器 docker exec -it Document_Core powershell # 测试ping解析 ping documentdata # 测试服务可达性 Invoke-WebRequest -Uri http://documentdata:80
如果能ping通且请求返回正常,说明网络配置无问题。
4. 处理服务启动顺序问题
depends_on仅保证documentdata在document_core之前启动,但不保证documentdata服务已完全就绪。若document_core启动时documentdata还未初始化完成,会出现临时连接失败。可以添加健康检查确保服务就绪后再启动依赖服务:
services: documentdata: # 其他配置... healthcheck: test: ["CMD", "powershell", "-Command", "Invoke-WebRequest -Uri http://localhost:80/health -UseBasicParsing"] interval: 10s timeout: 5s retries: 3 document_core: # 其他配置... depends_on: documentdata: condition: service_healthy
内容的提问来源于stack exchange,提问作者Justinas
相关产品推荐
相关产品推荐

