Docker Compose中Jest集成测试无法进行容器间HTTP请求
解决Docker Compose里服务间DNS解析失败的问题
看你给出的错误日志getaddrinfo ENOTFOUND app app:5000,核心问题就是lambda容器没法通过服务名app找到对应的Python服务容器。我给你梳理几个排查和解决的方向,你可以一步步试:
1. 确认服务都在同一个网络里
Docker Compose默认会给所有服务创建一个共享的桥接网络,服务之间直接用服务名(比如app)就能通信。不过有时候显式声明网络能避免一些奇怪的问题,你可以修改docker-compose.yml添加自定义网络:
version: '3.6' services: app: # 你的其他配置不变 networks: - my-shared-network lambda: # 你的其他配置不变 depends_on: - app networks: - my-shared-network db: # 你的其他配置不变 networks: - my-shared-network networks: my-shared-network: driver: bridge
2. 先确认app容器真的启动了
虽然你加了depends_on,但它只保证容器启动顺序,不保证服务完全就绪。不过你的错误是DNS解析失败,不是连接被拒绝,所以先确认app容器是不是正常跑起来了:
- 执行
docker-compose ps查看app服务的状态是否为Up - 如果
app没启动,查看日志排查原因:docker-compose logs app
3. 直接进lambda容器手动测试
最直接的方式是进入lambda容器,手动测试DNS解析和连接:
# 进入lambda容器 docker-compose exec lambda sh # 先ping app服务,验证DNS解析 ping app # 再尝试访问状态接口 curl http://app:5000/status
如果ping app失败,说明确实是DNS解析的问题;如果ping通但curl失败,才是服务未就绪的问题。
4. 检查请求URL的格式
从错误日志里的ENOTFOUND app app:5000来看,你的请求URL可能存在格式问题?比如是不是不小心多了空格?一定要确认getEndpointUrl()返回的是正确的http://app:5000,没有多余字符或格式错误。
5. 试试重启Docker服务
有时候Docker的DNS缓存会出现异常,重启一下Docker服务说不定就能解决问题。
另外提一句:虽然你用了轮询等待服务就绪,但如果app容器根本没启动,轮询再久也没用,所以先确保app能正常运行是第一步哦。
内容的提问来源于stack exchange,提问作者Corey Cole
相关产品推荐
相关产品推荐

