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

Docker-Compose容器均报“Waiting for PostgreSQL to become available...”求助

排查步骤

1. 测试容器间网络连通性

从卡住等待的容器(如web或worker)内部ping PostgreSQL服务名,确认网络可达:

docker exec -it <web-container-name> ping postgres

若不通,检查docker-compose.yml中网络配置,确保所有容器归属同一自定义网络(课程示例通常会定义)。

2. 验证PostgreSQL实际可连接状态

直接在PostgreSQL容器内用psql测试本地连接:

docker exec -it <postgres-container-name> psql -U <db-user> -d <db-name>

若连接失败,查看PostgreSQL初始化日志,排查数据库创建、用户权限等问题。

3. 检查等待脚本有效性

课程中的等待脚本(如wait-for-postgres.sh)可能存在配置不匹配:

  • 核对脚本内DB_HOST、DB_PORT、DB_USER与docker-compose.yml中的参数是否一致
  • 手动在web容器内运行脚本,查看具体错误:
docker exec -it <web-container-name> ./wait-for-postgres.sh

4. 确认端口映射配置

检查docker-compose.yml中的端口映射规则:

  • Django服务:确保配置类似ports: - "8010:8000"(对应课程内的端口设定)
  • Flower服务:确保配置类似ports: - "5557:5555"
    用以下命令验证实际映射端口:
docker port <container-name>

5. 跳过等待脚本直接测试服务启动

临时修改web容器启动命令,跳过等待脚本直接启动Django,判断是脚本问题还是数据库连接问题:

docker-compose run --rm web python manage.py runserver 0.0.0.0:8000

若能启动,说明等待脚本存在故障;若仍连接失败,检查Djangosettings.py中的数据库配置:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': os.environ.get('DB_NAME'),
        'USER': os.environ.get('DB_USER'),
        'PASSWORD': os.environ.get('DB_PASSWORD'),
        'HOST': 'postgres',
        'PORT': 5432,
    }
}

确认环境变量是否正确传递给容器。

6. 排查本地端口占用

检查本地8010/5557端口是否被其他程序占用:

# Linux/macOS
lsof -i :8010
lsof -i :5557

# Windows
netstat -ano | findstr :8010

若端口被占用,停止对应程序或修改docker-compose.yml中的端口映射规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 17:45:33