0

0

Linux 端口被占用的排查方法

冷漠man

冷漠man

发布时间:2026-01-25 13:24:31

|

983人浏览过

|

来源于php中文网

原创

端口显示“Address already in use”却查不到进程,通常因权限不足、未监听本地地址、容器占用、iptables DNAT规则或systemd socket激活所致;应优先用sudo ss -tulnlp排查,再检查docker、防火墙及systemd。

linux 端口被占用的排查方法

netstat 查端口占用时显示 “Address already in use” 却找不到进程

这通常是因为 netstat 默认不显示监听在非本地地址(如 0.0.0.0 或具体 IP)的 socket,或没加权限查看其他用户进程。实际端口已被占用,但你没看到对应行。

正确做法是用 sudo 运行,并加上 -tuln 参数:

sudo netstat -tuln | grep :8080

其中:-t 查 TCP,-u 查 UDP,-l 只显示监听态,-n 用数字端口代替服务名。如果仍无输出,说明可能不是传统 socket 监听,比如被 dockersystemd 或内核模块占用了端口。

lsof -i :端口号 返回空但端口确实无法绑定

lsof -i :8080 查不到进程,常见原因有三:

  • 目标进程以 root 权限运行,而你没用 sudo 执行 lsof
  • 端口被 iptablesnftables 的 DNAT/REDIRECT 规则“伪装”占用(比如 iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080),此时实际没有进程监听 80,但流量全被转走,lsof 不会显示
  • 容器或 pod 内部监听了该端口(如 Docker 容器映射了 -p 8080:8080),宿主机上 lsof 默认看不到容器网络命名空间里的监听

建议组合使用:

sudo lsof -iTCP:8080 -sTCP:LISTEN
sudo ss -tuln | grep :8080

ss 命令比 netstat 更快更可靠,但参数容易写错

ss 是现代 Linux 推荐替代 netstat工具,底层直接读取内核 socket 表,速度快且信息更全。但它的过滤语法和 netstat 不同,新手常因参数漏掉关键标志而查不到。

查指定端口监听进程的正确写法是:

一览AI绘图
一览AI绘图

一览AI绘图是一览科技推出的AIGC作图工具,用AI灵感助力,轻松创作高品质图片

下载
sudo ss -tulnlp | grep :8080

注意:-l(listening)、-p(show process,必须 root)、-n(numeric)、-t/-u(协议)。漏掉 -p 就看不到 PID 和程序名;漏掉 -l 则只显示已建立连接,不显示等待连接的监听端口。

如果提示 Permission denied,不是命令错了,是没加 sudo ——-p 需要 CAP_NET_ADMIN 或 root 权限。

Docker / Podman 容器导致端口“幽灵占用”

即使 sslsof 都没查到宿主机上的监听进程,端口仍不可用,大概率是容器在用。Docker 默认用 host 网络模式或端口映射(-p)时,会在宿主机上真实监听该端口。

快速确认方法:

  • 查所有容器端口映射:docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Ports}}" | grep 8080
  • 查所有监听了该端口的容器:docker ps -q | xargs -r docker port | grep 8080
  • 若用 Podman:podman ps --format "{{.ID}} {{.PORTS}}" | grep 8080

特别注意:容器停止后,有时 docker-proxy 进程残留(尤其旧版 Docker),表现为 lsof -i :8080 显示一个 docker-proxy 进程,kill 它即可释放端口。

实际排查时,别只盯一个命令。先 sudo ss -tulnlp 快速扫一遍,没结果再看容器,再检查 iptables/nftables,最后怀疑是否是 systemd socket 激活(systemctl list-sockets | grep 8080)。端口冲突的根因往往藏在最不常想到的地方。

相关专题

更多
format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

719

2023.07.31

python中的format是什么意思
python中的format是什么意思

python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

431

2024.06.27

k8s和docker区别
k8s和docker区别

k8s和docker区别有抽象层次不同、管理范围不同、功能不同、应用程序生命周期管理不同、缩放能力不同、高可用性等等区别。本专题为大家提供k8s和docker区别相关的各种文章、以及下载和课程。

257

2023.07.24

docker进入容器的方法有哪些
docker进入容器的方法有哪些

docker进入容器的方法:1. Docker exec;2. Docker attach;3. Docker run --interactive --tty;4. Docker ps -a;5. 使用 Docker Compose。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

495

2024.04.08

docker容器无法访问外部网络怎么办
docker容器无法访问外部网络怎么办

docker 容器无法访问外部网络的原因和解决方法:配置 nat 端口映射以将容器端口映射到主机端口。根据主机兼容性选择正确的网络驱动(如 host 或 overlay)。允许容器端口通过主机的防火墙。配置容器的正确 dns 服务器。选择正确的容器网络模式。排除主机网络问题,如防火墙或连接问题。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

401

2024.04.08

docker镜像有什么用
docker镜像有什么用

docker 镜像是预构建的软件组件,用途广泛,包括:应用程序部署:简化部署,提高移植性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

438

2024.04.08

tcp和udp的区别
tcp和udp的区别

TCP和UDP的区别,在连接性、可靠性、速度和效率、数据报大小以及适用场景等方面。本专题为大家提供tcp和udp的区别的相关的文章、下载、课程内容,供大家免费下载体验。

120

2023.07.25

udp是什么协议
udp是什么协议

UDP是OSI参考模型中一种无连接的传输层协议。本专题为大家带来udp是什么协议的相关文章,免费提供给大家。

290

2023.08.08

c++ 根号
c++ 根号

本专题整合了c++根号相关教程,阅读专题下面的文章了解更多详细内容。

58

2026.01.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.7万人学习

Git 教程
Git 教程

共21课时 | 3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号