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

Celery容器无法连接Postgres数据库问题排查求助

问题原因分析
  1. Celery容器未加载环境变量:你的worker服务(Celery容器)在docker-compose.yml中没有配置env_file,导致无法读取.env里的DB_HOST等数据库连接参数,Django默认使用localhost尝试连接Postgres,但容器内部没有部署Postgres,因此出现找不到本地socket的错误。
  2. Celery容器未依赖Postgres服务:worker的depends_on未包含db服务,虽然depends_on不保证Postgres完全就绪,但至少能保证启动顺序,避免Celery在Postgres未启动时就尝试建立连接。
  3. DATABASES配置可能未正确引用环境变量:你提供的settings.py未展示数据库配置部分,如果DATABASES里的HOST硬编码为localhost而非引用DB_HOST环境变量,也会导致连接失败。
解决方案

1. 更新docker-compose.yml的worker服务配置

修改worker服务,添加env_file和depends_on的db依赖:

worker:
  build: .
  container_name: celery
  restart: always
  command: celery -A yumezo worker -l info
  volumes:
    - .:/app
  env_file:
    .env
  depends_on:
    - redis
    - db

2. 确保settings.py的DATABASES配置正确引用环境变量

在settings.py中补充或修改数据库配置,使用.env中的变量:

import os

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': os.environ.get('DB_NAME'),
        'USER': os.environ.get('DB_USER'),
        'PASSWORD': os.environ.get('DB_PASS'),
        'HOST': os.environ.get('DB_HOST'),
        'PORT': os.environ.get('DB_PORT'),
    }
}

3. 重启服务验证效果

停止并重新启动所有容器:

docker-compose down
docker-compose up --build

这样Celery容器就能正确读取数据库连接参数,通过容器网络连接到db服务的Postgres,而不是尝试连接本地socket。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 20:51:19