当在 Docker 环境中遇到 Redis 连接不上问题时,可以按照以下步骤进行排查和解决:
docker ps
确保 Redis 容器状态为 "Up"。如果没有运行,启动容器:
docker start <container_name_or_id>
确保客户端应用和 Redis 容器在同一网络中:
docker network ls
docker network inspect <network_name>
如果不在同一网络,创建并连接:
docker network create my_network
docker network connect my_network <redis_container>
docker network connect my_network <app_container>
确保 Redis 配置允许外部连接:
redis.conf
:
bind 0.0.0.0
protected-mode no
或者在启动容器时设置:
docker run --name some-redis -d redis redis-server --bind 0.0.0.0 --protected-mode no
确保正确映射了 Redis 端口 (默认 6379):
docker run -p 6379:6379 --name some-redis -d redis
检查端口是否监听:
docker port some-redis
netstat -tulnp | grep 6379
检查宿主机防火墙是否阻止了 Redis 端口:
sudo ufw status
sudo ufw allow 6379
确保应用程序使用正确的连接字符串:
如果连接容器内的 Redis:
redis://redis_container_name:6379
如果连接宿主机上的 Redis:
redis://localhost:6379
如果设置了密码,确保连接时提供:
docker run --name some-redis -d redis redis-server --requirepass yourpassword
连接时使用:
redis://:yourpassword@redis_host:6379
docker logs some-redis
docker exec -it some-redis redis-cli
telnet localhost 6379
如果使用 host
网络模式:
docker run --network host --name some-redis -d redis
docker stop some-redis
docker rm some-redis
docker run --name some-redis -p 6379:6379 -d redis redis-server --bind 0.0.0.0 --protected-mode no
version: '3'
services:
redis:
image: redis
ports:
- "6379:6379"
command: redis-server --bind 0.0.0.0 --protected-mode no
restart: always
然后运行:
docker-compose up -d
通过以上步骤,应该能够解决大多数 Docker 环境中 Redis 连接不上的问题。如果问题仍然存在,请根据具体错误信息进一步排查。