Docker 部署容器项目时无法连接 Redis(127.0.0.1 连接失败)解决方案
当你把 WordPress / DuJiaoka / One-API 等服务跑在 Docker 里后,很多项目默认会用 127.0.0.1:6379 去连 Redis,然后你会发现——怎么都连不上。
核心原因很简单:
- 在容器里访问
127.0.0.1,指向的是容器自己的回环地址,不是宿主机(服务器)上的 Redis。 - 因此容器里
127.0.0.1:6379大概率并没有 Redis 服务在监听。
这一点来自 Docker 的网络隔离机制:容器有独立 network namespace,拥有自己的 loopback(
127.0.0.1)。可参考 Docker 文档对容器网络的描述(Container networking)。出处:Docker Docs(https://docs.docker.com/network/)。
前提
- 你会基本的 Ubuntu 服务器操作
- Redis 已安装并正常运行
- 你的应用(WordPress/DuJiaoka/One-API 等)运行在 Docker 容器内
第一步:修改 Redis 配置,允许被容器访问
Redis 默认可能只绑定 127.0.0.1(仅本机可访问),容器自然访问不到。
编辑配置文件(常见路径):
sudo nano /etc/redis/redis.conf
找到并修改/确认这些配置(不同发行版略有差异,以你机器上的配置为准):
- 放开 bind(允许其它地址访问)
# bind 127.0.0.1 ::1
- 关闭保护模式(按需,确保你已设置强密码并在内网/防火墙可控范围内使用)
protected-mode no
- 设置 Redis 访问密码
requirepass yourpassword
然后重启 Redis:
sudo systemctl restart redis-server
bind/protected-mode/requirepass均为 Redis 官方配置项。出处:Redis 文档(https://redis.io/docs/latest/operate/oss_and_stack/management/config/)。

第二步:获取宿主机内网 IP(用于容器连接)
安装网络工具(如果你还没装):
sudo apt install net-tools
查看网卡信息:
ifconfig
通常你会在 eth0(或 ens*)下面看到类似:
inet 10.x.x.x或inet 172.16.x.x或inet 192.168.x.x
把这个内网 IP记下来。
第三步:在容器项目里把 Redis 地址从 127.0.0.1 改成宿主机内网 IP
把应用配置里的 Redis 地址从:
127.0.0.1:6379
改为:
10.x.x.x:6379(你刚查到的宿主机内网 IP)
并填上你在 redis.conf 里设置的密码 yourpassword。

总结(把问题一针见血说清楚)
- 为什么容器里连
127.0.0.1:6379会失败?- 因为容器内的
127.0.0.1只代表容器自身,不是宿主机;Redis 在宿主机上时,容器当然连不上。
- 因为容器内的
- 为什么要用 Redis?
- 典型用途是做内存缓存,尤其当数据库在云端(如云 MySQL)时,用 Redis 缓冲可以降低访问延迟、减少数据库压力。
小建议(更稳的做法)
如果你希望更规范:
- 优先使用
docker compose建一个用户自定义网络,把应用和 Redis 都放进同一个 compose 网络里,然后用 服务名 直连(例如redis:6379),避免硬编码宿主机 IP。 - 若必须暴露 Redis 到宿主机外部,务必配好防火墙(只允许内网/可信 IP),并使用强密码。