Docker Compose启动报5000端口被占用查不到进程解决方案
故障原因
报错明确提示宿主机0.0.0.0:5000端口已被占用,普通权限下执行netstat查不到对应占用进程,是MacOS Monterey及以上版本默认开启的AirPlay接收器系统服务占用了5000端口。该服务属于系统级进程,无管理员权限的端口扫描命令无法枚举到它的监听记录,所以会出现grep无返回结果的情况。
修复方案
按需选择以下任意一种方案即可解决问题:
- 方案1:修改Docker端口映射(推荐,不影响系统原生功能)
直接调整docker-compose.yml中的端口映射规则,把宿主机侧的端口换成未被占用的端口即可,比如将宿主机5001端口映射到容器的5000端口,修改后的配置参考:
version: "3" services: redis: image: redis application: image: some_application ports: - 5001:5000
改完重新执行docker-compose up就能正常启动服务,后续访问宿主机5001端口即可对接容器内的应用。
- 方案2:关闭AirPlay接收器释放5000端口
如果必须使用宿主机5000端口做映射,可以手动关闭对应系统服务:打开系统设置→进入「通用」菜单→选择「隔空投送与接力」→关闭「AirPlay接收器」开关,等待10秒左右端口会自动释放,再执行启动命令就不会触发端口占用报错。
如果关闭AirPlay后问题仍存在,可以执行带管理员权限的排查命令sudo lsof -i :5000,该命令可以列出所有占用5000端口的进程(包括系统级进程),拿到对应进程PID后执行kill -9 <PID>即可强制释放端口。
内容的提问来源于stack exchange,提问作者Autechre
相关产品推荐
相关产品推荐

