1. 进入容器内部检查
# 进入Redis容器
docker exec -it <容器名或ID> /bin/bash
# 或使用redis-cli直接连接
docker exec -it <容器名> redis-cli
2. 检查Redis服务状态
# 在容器内检查Redis进程
ps aux | grep redis-server
# 查看Redis监听端口
netstat -tlnp | grep 6379
# 或使用(如果netstat不可用)
ss -tlnp | grep 6379
3. 检查Redis配置
# 查看配置文件中的绑定设置
cat /etc/redis/redis.conf | grep -E "^(bind|protected-mode|port)"
常见配置问题:
bind 127.0.0.1 只允许本地连接 → 改为 bind 0.0.0.0
protected-mode yes 且未设置密码 → 改为 no 或设置密码
4. 检查容器网络
# 查看容器网络模式
docker inspect <容器名> | grep NetworkMode
# 查看容器IP
docker inspect <容器名> | grep IPAddress
# 测试容器内部连通性
docker exec <容器名> ping <目标IP>
5. 检查防火墙/SELinux
# 查看宿主机防火墙规则
iptables -L -n | grep 6379
# 如果使用firewalld
firewall-cmd --list-all
# 临时关闭SELinux测试
setenforce 0
6. 端口映射检查
# 查看容器的端口映射
docker port <容器名>
# 检查宿主机是否监听
netstat -tlnp | grep 6379
7. 连接测试
# 从容器内部测试
docker exec <容器名> redis-cli -h 127.0.0.1 -p 6379 ping
# 从宿主机测试(默认映射端口)
redis-cli -h 127.0.0.1 -p 6379 ping
# 从其他容器测试
docker run --rm redis redis-cli -h <redis容器IP> -p 6379 ping
8. 查看Redis日志
# 查看容器日志
docker logs <容器名>
# 或进入容器查看Redis日志
tail -f /var/log/redis/redis-server.log
常见问题及解决方案
问题1:只能本地访问
# 解决方案:修改redis.conf
bind 0.0.0.0
protected-mode no # 或设置requirepass密码
问题2:端口未正确映射
# 启动容器时确保端口映射正确
docker run -p 6379:6379 redis
问题3:网络模式限制
# 使用host网络模式(慎用)
docker run --network host redis
# 或创建自定义网络
docker network create mynet
docker run --network mynet --name redis redis
问题4:连接数达到上限
# 查看当前连接
redis-cli info clients
# 输出:connected_clients:XX
# 修改最大连接数(在redis.conf中)
maxclients 10000
9. 快速诊断脚本
#!/bin/bash
CONTAINER_NAME="your_redis_container"
echo "1. 检查容器状态..."
docker ps | grep $CONTAINER_NAME
echo "2. 检查端口映射..."
docker port $CONTAINER_NAME
echo "3. 测试内部连接..."
docker exec $CONTAINER_NAME redis-cli ping
echo "4. 测试外部连接..."
redis-cli -h 127.0.0.1 -p 6379 ping
建议的启动命令
# 推荐使用以下方式启动Redis容器
docker run -d \
--name redis \
-p 6379:6379 \
-v /path/to/redis.conf:/usr/local/etc/redis/redis.conf \
redis redis-server /usr/local/etc/redis/redis.conf
如果需要进一步帮助,请提供:
Docker容器的启动命令或docker-compose.yml
Redis配置文件内容
具体的错误信息
使用的网络模式