未使用docker-compose时Docker环境下Django无法连接Redis的问题求助
故障原因
两个单独启动的容器默认运行在Docker的默认bridge网络中,该网络不支持容器名DNS解析能力,因此Django容器无法将redis这个主机名解析为对应容器的IP,触发Name or service not known报错。
可行解决方案
方案1:使用自定义bridge网络(最推荐,长期稳定)
自定义bridge网络默认支持同网络下容器名的DNS解析,操作步骤如下:
- 创建自定义网络
docker network create app-net - 停止并删除已运行的旧容器
docker rm -f redis # 替换为你的Django容器ID或名称,不知道可以用docker ps查看 docker rm -f <django容器标识> - 重新启动Redis容器,指定加入自定义网络
docker run -d --name redis --network app-net -p 6379:6379 redis - 重新启动Django容器,指定加入同一个自定义网络
docker run -it --network app-net -p 8000:8000 voucher
操作完成后,你原有的Redis连接地址redis://redis:6379/1即可正常使用。
方案2:使用Redis容器的内部IP连接(临时调试用)
- 执行命令获取Redis容器的内部IP:
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' redis - 将Django配置中的Redis连接地址修改为
redis://<查询到的IP>:6379/1即可。
注意:该方案稳定性差,容器重启后内部IP可能发生变化,仅适合临时调试使用。
方案3:通过宿主机端口映射连接
你已经将Redis的6379端口映射到了宿主机,可以直接通过宿主机地址访问:
- 如果你使用的是Docker Desktop(Mac/Windows版本),直接将Redis连接地址修改为
redis://host.docker.internal:6379/1即可。 - 如果你使用的是Linux版本Docker,启动Django容器时增加参数
--add-host=host.docker.internal:host-gateway,完整启动命令如下:
再将Redis连接地址修改为docker run -it -p 8000:8000 --add-host=host.docker.internal:host-gateway voucherredis://host.docker.internal:6379/1即可。
内容的提问来源于stack exchange,提问作者Mojtaba Arezoomand
相关产品推荐
相关产品推荐

