docker-proxy持续占用端口导致docker-compose无法启动服务如何解决
解决方案
- 第一步:排查全局所有容器,确认是否有其他容器占用9000端口
docker-compose ps仅会查询当前工作目录下docker-compose.yml对应的容器,其他目录启动的容器、手动运行的容器不会展示,执行以下命令排查全局容器:
docker ps -a | grep 9000
如果查询到对应容器,直接强制删除即可释放端口:
docker rm -f <查询到的容器ID>
- 第二步:清理Docker残留网络资源
如果第一步没有查到对应容器,说明是之前容器异常退出时,Docker网络栈残留了端口映射配置,导致docker-proxy进程被误拉起:
- 停止Docker相关服务
sudo systemctl stop docker sudo systemctl stop docker.socket
- 杀掉残留的docker-proxy进程
# 杀掉占用9000端口的指定进程 sudo kill -9 18924 # 也可以批量清理所有docker-proxy残留进程 sudo pkill -9 docker-proxy
- 删除Docker本地网络状态缓存文件
sudo rm -rf /var/lib/docker/network/files/local-kv.db
- 重启Docker服务
sudo systemctl start docker
操作完成后再执行docker-compose up -d即可正常启动。
补充说明:如果临时需要快速启动服务,也可以直接修改docker-compose.yml中php服务的端口映射规则,将宿主机端口改为其他未被占用的端口(如9001)即可绕过该问题。
内容的提问来源于stack exchange,提问作者Morad
相关产品推荐
相关产品推荐

