端口占用排障
定位监听地址、协议和进程归属,检查 systemd 服务及容器端口映射。
适用范围与前提
Linux TCP/UDP 监听冲突;不直接终止占用进程。
- 确认需要绑定的地址、端口和 TCP/UDP 协议。
- 查看他人进程通常需要 sudo;把 APP_PID 与 APP_SERVICE 替换为实际进程号及服务名。
命令仅供手动复制到获授权的环境执行。站点不会连接服务器;涉及网络的诊断可能产生请求或登录审计记录。
1. 列出监听与协议
sudo ss -ltnp
sudo ss -lunp预期现象:对照本地地址和协议。0.0.0.0、:: 与指定地址的绑定可能冲突;IPv6 双栈行为依系统配置。
- 发现对应监听 → 确认 PID 和服务归属
- 无监听:可能是启动竞态或不同网络命名空间 → 检查容器发布端口
2. 确认 PID 和服务归属
ps -fp APP_PID
systemctl status APP_SERVICE --no-pager预期现象:确认可执行文件、用户、父进程和所属服务,不只根据进程名字判断。status 对停止服务返回非零并不代表命令损坏。
- 已有合法业务占用 → 修复建议(需人工确认)
- 疑似容器或端口代理 → 检查容器发布端口
3. 检查容器发布端口
docker ps --format "table {{.Names}} {{.Ports}} {{.Status}}"预期现象:核对宿主端口与容器端口,确认 Docker CLI 指向预期主机。Docker 权限等价于高权限,不能随意授予。
- 端口映射冲突 → 修复建议(需人工确认)
- 未找到归属:收集启动错误及网络命名空间信息 → 升级求助前收集
修复建议(需人工确认)
- 由业务负责人决定更改新服务端口或监听地址,并更新健康检查、反向代理及访问策略。
- 只有确认影响、保留配置并安排维护窗口后才停止重复服务或调整容器映射;不默认使用强制杀进程。
验证恢复
- 重新检查 ss 与容器端口映射,确认预期进程独占正确地址和协议。
- 按业务允许的方法验证服务可达,观察启动日志是否继续报绑定失败。
升级求助前收集
- 准确错误文本、地址/端口/协议、PID 与所属服务、脱敏容器端口映射。