基于jwilder/nginx-proxy运行Laravel Docker项目提示3306端口占用如何解决
问题修复方案
1. 定位3306端口真实占用进程
报错明确指向3306端口被占用,需使用root权限查询才能覆盖所有系统级进程:
- 执行端口查询命令:
sudo lsof -i :3306或sudo netstat -tulpn | grep 3306 - 若返回宿主机原生MySQL服务进程,执行
sudo systemctl stop mysql关闭服务,需永久禁用开机自启可追加执行sudo systemctl disable mysql - 若返回Docker相关进程,说明有残留容器未清理,执行
docker ps -a | grep 3306获取对应容器ID后,执行docker rm -f <容器ID>强制删除
2. 清理Docker全局残留资源
docker-compose down仅能清理当前目录compose文件关联的资源,其他项目的残留容器、网络需要全局清理:
- 停止所有运行中的Docker容器:
docker stop $(docker ps -q) - 清理所有停止容器、未使用网络、悬空镜像:
docker system prune -f - 若确认不需要旧项目的MySQL存储数据,可追加清理未使用的存储卷:
docker system prune -f --volumes
3. 可选:调整端口映射规避冲突
如果需要保留宿主机原生3306服务,修改当前项目的docker-compose.yml配置:
- 找到MySQL服务的
ports配置项,将原有"3306:3306"修改为未占用端口映射,例如"3307:3306",项目内部连接MySQL仍使用3306端口,外部访问使用3307端口即可 - 同步检查jwilder/nginx-proxy的端口映射规则,确认80、443等端口无宿主机服务占用,存在冲突也可按相同逻辑修改映射端口
4. 验证服务状态
- 回到项目目录执行
docker-compose up -d后台启动服务 - 执行
docker ps确认所有容器状态为Up,无循环重启的容器 - 503服务不可用错误通常是nginx-proxy无法转发请求到后端Laravel服务,需确认Laravel容器已正常启动、环境变量配置正确、
VIRTUAL_HOST参数与访问的域名/IP匹配
内容的提问来源于stack exchange,提问作者mstdmstd
相关产品推荐
相关产品推荐

