无法从Docker容器DServer连接到Redis容器问题排查
问题:Docker Compose环境中Redis无法在
client list中看到DServer的连接 我用Docker Compose配置了Redis和DServer两个容器,都连接到mynetwork桥接网络。Redis配置已经设置bind 0.0.0.0、protected-mode no,而且DServer依赖Redis的配置也已添加。现在能进入Redis容器用redis-cli操作,但执行client list时看不到DServer的IP地址,已经用docker inspect确认过两个容器在同一网络,该怎么解决?
相关配置
docker-compose.yml
version: '2' services: redis: image: redis:latest container_name: redis hostname: redis ports: - "127.0.0.1:6379:6379" networks: - mynetwork volumes: - ./redis.conf:/usr/local/etc/redis/redis.conf command: redis-server /usr/local/etc/redis/redis.conf DServer: image: DServerImage networks: - mynetwork networks: mynetwork: driver: bridge
Redis配置文件
bind 0.0.0.0 protected-mode no
Redis client list输出
127.0.0.1:6379> client list id=3 addr=127.0.0.1:48174 laddr=127.0.0.1:6379 fd=9 name= age=4 idle=0 flags=N db=0 sub=0 psub=0 ssub=0 multi=-1 qbuf=26 qbuf-free=20448 argv-mem=10 multi-mem=0 rbs=1024 r
排查与解决步骤
1. 确认DServer是否真的发起了Redis连接
先排除DServer未连接的情况:
- 进入DServer容器,执行
ping redis,验证是否能解析到Redis容器的IP(Docker Compose默认支持服务名解析) - 在DServer容器内执行
redis-cli -h redis ping,测试是否能成功连接Redis并返回PONG - 查看DServer的运行日志,检查是否存在Redis连接失败的报错信息
2. 验证Redis配置是否实际生效
挂载的配置文件可能未被正确加载,需确认:
- 进入Redis容器,执行
redis-cli config get bind和redis-cli config get protected-mode,确认返回值为0.0.0.0和no - 查看Redis启动日志,确认是否有
Loaded configuration file /usr/local/etc/redis/redis.conf的提示,验证配置文件已被加载
3. 检查DServer的Redis连接地址
确保DServer配置的Redis地址正确:
- 如果DServer用的是
127.0.0.1:6379,它会尝试连接自身容器的6379端口,而非Redis容器,自然不会出现在Redis的客户端列表中 - 将DServer的Redis连接地址修改为
redis:6379(使用Docker Compose的服务名+端口)
4. 深度验证网络连通性
即使已确认同网络,仍需进一步验证:
- 执行
docker inspect mynetwork查看网络详情,确认两个容器的IP处于同一子网 - 在DServer容器内执行
telnet redis 6379或nc -zv redis 6379,测试Redis端口是否可连通
5. 过滤Redis客户端列表
client list输出可能被截断,可过滤本地连接(你自己进入容器的连接)查看其他客户端:
redis-cli client list | grep -v 127.0.0.1
内容的提问来源于stack exchange,提问作者least Risk
相关产品推荐
相关产品推荐

