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

Docker环境下Django连接Redis主机名解析失败问题求助

Docker-compose下Django无法连接Redis,报错cache:6379名称未知

核心问题定位

错误信息显示连接目标是cache:6379,但你的Django配置里明确写的是redis:6379,说明Django实际加载的缓存配置并非你修改的local.py,或是有其他配置/环境变量覆盖了CACHES设置。

解决方案步骤

1. 确认Django实际生效的配置

进入Django容器,执行命令查看当前生效的缓存配置:

docker exec -it allianceuath python3 /home/allianceserver/myauth/manage.py shell

在Python shell中输入以下代码:

from django.conf import settings
print(settings.CACHES)

如果输出的LOCATION是redis://cache:6379,说明存在其他配置文件(如base.py)未被local.py覆盖,或是环境变量优先级更高。

2. 修正容器名称拼写(建议)

你的Django容器名称是allianceuath(缺失字母r),虽不影响网络连接,但可能造成后续维护混淆,建议修正为allianceauth。

3. 确保Redis就绪后再启动Django

depends_on仅保证容器启动顺序,不保证Redis服务完全就绪。修改docker-compose.yml中的allianceauth服务配置,添加健康检查依赖:

allianceauth:
    # 保留原有配置
    depends_on:
      redis:
        condition: service_healthy
    # 保留原有配置

这样Django容器会等待Redis的健康检查通过后再启动,避免启动时Redis服务未就绪。

4. 验证容器内DNS解析

进入Django容器,测试是否能解析redis主机名:

docker exec -it allianceuath ping redis

如果ping不通,检查容器是否正确加入redis网络:

docker inspect allianceuath | grep Networks

确认输出中包含redis网络。

5. 检查环境变量是否覆盖配置

你的Django容器加载了.env文件,检查该文件中是否存在CACHE_URL或其他Redis相关环境变量,这类变量会优先于local.py的配置生效。

数据库错误的关联说明

后续触发的AttributeError: 'NoneType' object has no attribute 'startswith'是Redis连接失败导致的连锁反应,解决Redis连接问题后该错误会自动消失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 16:17:31