port-in-use

端口被占用的定位与修复

现象

服务启动报 Address already in use、bind: address already in use,或无法监听指定端口。常见于旧进程未退出、另一个服务抢占或容器端口映射冲突。

快速定位

ss -lntp | grep ':<port>'
lsof -i :<port>
fuser -n tcp <port>
ps -p <pid> -o pid,ppid,comm,args
systemctl status <service>
docker ps --format '{{.Names}}\t{{.Ports}}'

常见根因

  1. 旧进程没有正常退出,仍在监听。
  2. 另一个服务或子进程占用了同一端口。
  3. systemd socket activation 或守护进程自动拉起。
  4. TIME_WAIT 大量存在,端口复用配置不当。
  5. 容器端口映射到宿主机同一端口。
  6. 只监听 IPv6 或特定地址,客户端连的却是另一个地址族。

修复

相关命令