You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:09:32