You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Docker环境下Redis连接失败求助:修改REDIS_HOST仍无法解决

解决Docker环境下的Redis连接问题

我来帮你分析下这个问题,两种错误其实对应不同的Docker网络场景,咱们一步步拆解解决:

先搞懂两种错误的根源

  • REDIS_HOST=redis时解析失败:Docker容器之间默认只能在同一个自定义网络下通过容器名互相访问。如果你的应用容器和这个名为redis的容器不在同一个网络里,就会出现getaddrinfo failed的域名解析错误。
  • REDIS_HOST=127.0.0.1/localhost时连接被拒绝:容器里的127.0.0.1是容器自身的回环地址,不是宿主机的地址。你的应用容器里没有运行Redis,自然会连接失败。

具体解决方案

1. 确认应用容器和目标Redis容器的网络归属

首先得搞清楚你的应用容器和要连接的Redis容器是不是在同一个Docker网络里:

  • 查看所有Docker网络:
    docker network ls
    
  • 查看应用容器所属网络:
    docker inspect <你的应用容器ID/名称> | grep -A5 "Networks"
    
  • 查看目标Redis容器所属网络(比如你想连的是redis容器):
    docker inspect redis | grep -A5 "Networks"
    

如果两者不在同一个网络,把应用容器连接到Redis所在的网络:

docker network connect <Redis所在的网络名称> <你的应用容器名称>

2. 使用正确的Redis容器名作为REDIS_HOST

从你的docker ps输出看,有4个Redis容器,你需要根据应用的归属选择对应的容器名:

  • 如果应用是独立的,要连那个端口映射到宿主机的redis容器:确保网络互通后,设置REDIS_HOST=redis
  • 如果应用是ms-worker服务的一部分:设置REDIS_HOST=ms-worker_redis_1
  • 如果应用是ma系列服务的一部分:对应设置REDIS_HOST=ma-worker-redis-serviceREDIS_HOST=ma-redis-service

3. 修改.env后重启应用容器

修改好REDIS_HOST的值后,必须重启应用容器让新的环境变量生效:

docker restart <你的应用容器名称>

额外验证:在应用容器内测试连接

可以进入应用容器直接测试Redis连接,确认网络通畅:

# 进入应用容器的shell
docker exec -it <你的应用容器名称> bash
# 用redis-cli测试连接(替换成你的Redis容器名)
redis-cli -h ms-worker_redis_1 -p 6379
# 如果能进入redis-cli交互界面,说明连接正常

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

火山引擎 最新活动