Docker环境下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

