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

Docker跨容器调用Django REST接口报ECONNREFUSED 0.0.0.0:8000错误求助

问题排查与解决方案

核心原因1:axios配置覆盖

你看到的请求0.0.0.0:8000的错误,大概率是axios实例的全局配置导致的:

  • 检查axiosInst初始化代码,是否设置了baseURL为http://0.0.0.0:8000,本地运行时这个地址指向你本机启动的Django服务可以正常访问,但容器内的0.0.0.0指向测试容器自身,自然会连接拒绝。
  • 你贴出的测试代码里写死了http://app:8000但完全没有用到函数传入的path参数,说明你实际运行的测试代码大概率没有写死完整域名,而是依赖全局baseURL+ 相对路径发起请求,所以才会用了错误的地址。
  • 解决方法:容器环境下将axios的baseURL修改为http://app:8000,或者每次请求都写完整的绝对路径。

核心原因2:服务启动顺序逻辑错误

docker-compose的depends_on只能保证容器的启动顺序,不会等Django服务完全就绪后再启动测试容器:

  • Django启动时需要先执行迁移、加载数据,之后才会启动runserver监听端口,测试容器启动过快时,Django还没开始监听8000端口,就会返回连接拒绝错误。
  • 解决方法:给app服务添加健康检测,让测试容器等Django服务正常运行后再启动,修改docker-compose配置如下:
version: "3.8"
services:
  test:
    build: ./cucumber_drf_tests
    image: cucumber_test
    container_name: cucumber_container
    # 测试服务不需要映射端口,可删除以下两行
    # ports:
    #   - 8001:8000
    depends_on:
      app:
        condition: service_healthy
  app:
    build: .
    image: app:django
    container_name: django_rest_container
    ports:
      - 8000:8000
    expose:
      - 8000
    # 原卷挂载路径和Dockerfile内WORKDIR不匹配,要么调整为/app/src要么删除避免代码版本冲突
    # volumes:
    # - .:/app/src
    command: >
      bash -c "python manage.py migrate
      && python manage.py loaddata ./project_apps/fixtures/dummy_data.json
      && python manage.py runserver 0.0.0.0:8000"
    healthcheck:
      test: ["CMD-SHELL", "python -c \"import urllib.request; urllib.request.urlopen('http://localhost:8000')\""]
      interval: 3s
      timeout: 10s
      retries: 5
    depends_on:
      - db
  db:
    image: postgres
    container_name: postgres_db
    ports:
      - 5432:5432
    volumes:
      - ./data/db:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres

这里的健康检查用了Python自带的模块,不需要额外安装curl或者nc工具。

其他需要检查的配置

  • 确认Django的settings.py里ALLOWED_HOSTS配置包含app,或者临时设置为ALLOWED_HOSTS = ["*"]测试,避免Django直接拒绝来自测试容器的请求。
  • 可以手动进入测试容器执行curl http://app:8000验证网络连通性,如果可以访问说明是代码配置问题,如果不能访问再排查Docker网络配置。

内容的提问来源于stack exchange,提问作者htodev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 13:54:03