使用Docker-Compose时Django容器无法连接Redis容器的问题排查
解决Docker Compose中Django容器无法连接Redis容器的问题
我完全懂你折腾好几个小时却卡在连接问题上的崩溃感!之前帮朋友排查过几乎一模一样的情况,咱们先把问题根源和解决办法理清楚:
为啥会出现那些连接拒绝的报错?
在Docker Compose创建的专属网络里,每个容器都是独立的网络节点。你在Django配置里写的localhost、127.0.0.1或者0.0.0.0,其实都是指向Django容器自己,而不是Redis容器。Redis容器只会在Compose的内部网络里广播服务,根本不会绑定到主机的localhost,所以自然连不上。
具体解决步骤
第一步:确认Docker Compose里的Redis服务名
先检查你的docker-compose.yml,确保Redis服务有明确的名称(比如下面示例里的redis),同时Django服务要依赖这个Redis服务:services: redis: image: redis:latest ports: - "6379:6379" django: build: . command: python manage.py runserver 0.0.0.0:8000 depends_on: - redis ports: - "8000:8000"第二步:修改Django的Redis连接配置
把Django配置里(比如settings.py)原来的localhost/127.0.0.1,直接换成Docker Compose里Redis的服务名(也就是上面的redis)。举个例子:# 缓存配置 CACHES = { "default": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://redis:6379/1", # 这里用服务名代替localhost "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", } } } # 如果用了Celery,也要同步修改 CELERY_BROKER_URL = "redis://redis:6379/0" CELERY_RESULT_BACKEND = "redis://redis:6379/0"第三步:重启服务生效
执行以下命令重启你的Docker Compose服务,确保配置生效:docker-compose down && docker-compose up --build
补充说明
Docker Compose会自动为同一配置下的容器创建内部网络,并且支持通过服务名直接访问其他容器,就像用域名访问一样。之前你一直指向localhost,相当于让Django容器自己去连自己的6379端口,那肯定会被拒绝呀!
内容的提问来源于stack exchange,提问作者ThatCampbellKid
相关产品推荐
相关产品推荐

