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

Docker Compose下Django应用无法连接Postgres数据库问题求助

问题根因

连接失败是三类配置问题叠加导致的:

  • 两个容器处于隔离的网络中:从IP段判断,Postgres容器(172.19.0.2)接入的是Docker Compose自动创建的项目自定义网桥,Django容器(172.17.0.2)接入的是Docker全局默认的bridge网桥,两个网络默认不互通,既无法ping通,也不能通过服务名做DNS解析。出现这个问题的核心原因是你给Django服务设置了固定容器名drf_app,如果之前手动启动过同名容器,本次执行docker-compose up时会直接复用旧容器的网络配置,不会将其接入当前项目的自定义网络。
  • .env配置存在语法错误:你在SQL_HOST参数后写了行内注释,Docker Compose加载环境变量时不会自动过滤值后空格+#的注释内容,实际读取到的SQL_HOST值是db #this one should match the service name,而非预期的纯值db,就算网络连通也会触发主机名解析失败。
  • env_file路径配置错误:你写的env_file: /.env指向宿主机根目录下的文件,而非项目目录中你实际配置的.env文件,会直接导致环境变量加载异常。
修复步骤

按顺序执行以下操作即可解决问题:

  1. 清理现有异常容器和残留网络
    docker-compose down
    docker rm -f drf_app
    
  2. 修正docker-compose.yml配置,调整env_file路径,移除自定义网络下不需要的过时links配置,修正后内容如下:
    version: '3.3'
    services:
      web:
        build: .
        container_name: drf_app
        volumes:
          - ./src:/drf
        ports:
          - 9090:8080
        env_file:
          - ./.env
        depends_on:
          - db
      db:
        image: postgres:13-alpine
        environment:
          - POSTGRES_HOST_AUTH_METHOD=trust
          - POSTGRES_USER=myuser
          - POSTGRES_PASSWORD=mypass
          - POSTGRES_DB=mydb
        volumes:
          - postgres_data:/var/lib/postgresql/data/
        ports:
          - 5432:5432
    
    volumes:
      postgres_data:
    
  3. 修正.env配置,移除行内注释,保证参数值无多余字符,注释需要单独占行书写:
    SQL_ENGINE=django.db.backends.postgresql
    SQL_DATABASE=mydb
    SQL_USER=myuser
    SQL_PASSWORD=mypass
    SQL_HOST=db
    SQL_PORT=5432
    
  4. 强制重建所有服务启动,避免复用旧容器配置:
    docker-compose up --force-recreate -d
    
验证说明

启动完成后可做两步校验:

  • 进入Django容器执行ping db,能正常解析到db容器的IP即代表网络连通
  • 执行Django数据库迁移命令,无连接报错即配置生效

注意:depends_on仅控制容器启动顺序,不会等待Postgres服务完全就绪,如果启动时偶发连接失败,可以在Django启动脚本中增加几秒等待时间,或者用端口检测工具确认数据库可连接后再启动Django服务。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 00:45:38