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

Docker化项目时Celery容器无法连接Redis的问题求助

问题:Docker化旧项目时Redis连接失败(Error 99 Address not available)

错误信息

Traceback (most recent call last):
  File "/venv/lib/python3.10/site-packages/redis/connection.py", line 624, in connect
    sock = self.retry.call_with_retry(
  File "/venv/lib/python3.10/site-packages/redis/retry.py", line 46, in call_with_retry
    return do()
  File "/venv/lib/python3.10/site-packages/redis/connection.py", line 625, in <lambda>
    lambda: self._connect(), lambda error: self.disconnect(error)
  File "/venv/lib/python3.10/site-packages/redis/connection.py", line 690, in _connect
    raise err
  File "/venv/lib/python3.10/site-packages/redis/connection.py", line 678, in _connect
    sock.connect(socket_address)
OSError: [Errno 99] Address not available

During handling of the above exception, another exception occurred:
...
Exception Type: OperationalError at /
Exception Value: Error 99 connecting to localhost:6379. Address not available.

核心原因

Docker容器内的localhost指向容器自身,而非宿主机。如果项目配置中仍使用localhost:6379连接Redis,容器内无法找到对应的Redis服务,导致连接失败。

解决步骤

1. 配置Docker Compose包含Redis服务

在项目根目录创建或修改docker-compose.yml,添加Redis服务并确保web服务与Redis在同一网络:

version: '3.8'
services:
  redis:
    image: redis:latest
    restart: always
    ports:
      - "6379:6379"
  web:
    build: .
    restart: always
    depends_on:
      - redis
    environment:
      - REDIS_HOST=redis  # 使用Docker服务名作为Redis地址
      - CELERY_BROKER_URL=redis://redis:6379/0
      - CELERY_RESULT_BACKEND=redis://redis:6379/0

2. 更新项目中的Redis连接配置

  • 修改Django的settings.py,将Redis相关配置中的localhost替换为redis:
# Celery配置
CELERY_BROKER_URL = os.environ.get('CELERY_BROKER_URL', 'redis://redis:6379/0')
CELERY_RESULT_BACKEND = os.environ.get('CELERY_RESULT_BACKEND', 'redis://redis:6379/0')

# 其他直接连接Redis的代码
REDIS_CONNECTION = redis.Redis(host=os.environ.get('REDIS_HOST', 'redis'), port=6379, db=0)

3. 重启并验证服务

  • 启动所有服务:
docker-compose down && docker-compose up -d
  • 查看Redis容器日志确认服务正常运行:
docker logs <your-redis-container-name>
  • 查看web容器日志,确认连接错误已解决:
docker logs <your-web-container-name>

4. 额外检查点

  • 确保Redis容器没有被防火墙或安全组阻断端口
  • 确认所有依赖Redis的服务(如Celery worker)也使用相同的Redis地址配置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 16:34:55