在DigitalOcean/Docker环境构建应用时出现Redis启动错误
解决Redis容器启动端口冲突问题
我碰到过好多次这个问题,大概率是Redis要用到的端口被别的进程占了!给你几个一步步排查解决的办法:
1. 先确认端口被哪个进程占用
首先得搞清楚到底是哪个进程抢了Redis的端口。假设你的docker-compose里Redis映射的是默认的6379端口,执行下面的命令排查:
sudo lsof -i :6379 # 或者用netstat命令 sudo netstat -tulpn | grep :6379
如果输出里显示有其他进程(比如本地安装的Redis服务、或者别的第三方应用),那就是它占用了端口导致冲突。
2. 停止占用端口的进程
如果是本地Redis服务在后台运行,直接停掉就行:
# Ubuntu/Debian系统 sudo systemctl stop redis-server sudo systemctl disable redis-server # 可选:防止开机自动启动本地Redis # CentOS/RHEL系统 sudo systemctl stop redis sudo systemctl disable redis
要是是其他应用占用了端口,要么停掉该应用,要么修改它的运行端口。
3. 修改Docker Compose里的Redis端口映射
不想停掉其他进程的话,给Redis换个宿主机端口映射就行。比如把原来的6379:6379改成6380:6379,这样外部用6380访问,容器内部还是用默认的6379:
services: redis: image: redis:latest ports: - "6380:6379" # 修改这里的宿主机端口 # 其他配置项...
改完之后重新执行你的部署命令即可。
4. 清理Docker残留的无效端口绑定
有时候Docker的端口代理会出现异常,残留一些无效的绑定关系。可以试试重启Docker服务来修复:
sudo systemctl restart docker
重启完成后再重新执行构建部署命令,说不定就能正常启动了。
5. 检查防火墙与安全组设置
DigitalOcean的服务器自带控制台防火墙,同时服务器系统本身也可能有ufw这类防火墙工具,需要确保Redis用到的端口是开放的:
# 查看ufw防火墙规则 sudo ufw status # 如果目标端口没开放,添加允许规则 sudo ufw allow 6379/tcp # 换成你实际用的端口
另外记得去DigitalOcean的控制台,检查对应Droplet的防火墙规则,确保目标端口的入站流量是允许的。
小提示:每次部署前可以先检查容器状态,用
docker ps -a看看有没有残留的Redis容器没清理干净,有的话先执行docker rm -f redis_1删掉再重新构建。
内容的提问来源于stack exchange,提问作者Rails Developer
相关产品推荐
相关产品推荐

