Django Channels启动Redis Docker容器报端口已占用问题咨询
问题根因
报错核心为宿主机6379端口已被其他进程占用,Docker无法将Redis容器的6379端口绑定到宿主机对应端口,因此启动失败。你看到的一长串十六进制字符串是Docker提前生成的容器ID,后续端口绑定流程失败后,这个容器会以退出状态残留。
排查步骤
- 定位占用6379端口的进程:
- Mac/Linux系统执行:
lsof -i :6379或ss -tulpn | grep 6379 - Windows系统执行:
netstat -ano | findstr :6379
执行后可拿到占用端口的进程PID,常见占用场景包括:本地安装的Redis服务后台自启、之前启动未正常销毁的Redis容器、其他默认使用6379端口的服务。
- Mac/Linux系统执行:
- 检查是否为遗留Docker容器占用端口:执行
docker ps查看所有正在运行的容器,确认列表中是否有已启动的Redis服务。 - 检查本次启动的残留容器:执行
docker ps -a,可以看到报错信息中提到的名为hopeful_jemison的退出状态容器,这是本次启动失败留下的残留实例。
解决方案
根据你的实际需求二选一即可:
方案1:释放6379端口,沿用官方文档的启动命令
- 停掉占用6379端口的进程:
- 如果是本地安装的Redis服务占用:
- Windows:执行
net stop redis,或在服务面板找到Redis服务手动停止 - Mac(Homebrew安装):执行
brew services stop redis - Linux(systemd管理):执行
sudo systemctl stop redis
- Windows:执行
- 如果是正在运行的旧Docker容器占用:执行
docker ps拿到对应容器ID,执行docker stop <容器ID>停掉容器,不需要保留的话可以追加执行docker rm <容器ID>删除。
- 如果是本地安装的Redis服务占用:
- 清理本次启动失败的残留容器:执行
docker rm hopeful_jemison - 重新执行原启动命令即可:
docker run -p 6379:6379 -d redis:5
方案2:保留现有占用6379的服务,更换映射端口
如果占用6379端口的服务你需要继续使用,不需要停止,可以直接修改Docker命令的宿主机映射端口,比如将宿主机端口改为6380,启动命令为:docker run -p 6380:6379 -d redis:5
注意:更换端口后,需要同步修改Django Channels配置中的Redis连接地址,将原配置里的6379端口改为你实际映射的宿主机端口(比如示例中的6380),否则Channels无法正常连接到Redis服务。
内容的提问来源于stack exchange,提问作者ProgrammingWithTasos
相关产品推荐
相关产品推荐

