端口又冲突了?装上这个红绿灯看板,群晖端口一目了然
简介
什么是 Port-Light ?
Port-Light是一个本地的Web看板,用「红绿灯」网格直观展示服务器上 哪些端口已被占用。它专为运行大量Docker Compose栈、经常忘记哪个端口被占用的homelab玩家设计,把三类数据源合并成一张端口占用地图。
主要特点
- 三源合一:合并主机监听表(
/proc或ss)、Docker API(容器名、状态、镜像、端口映射)以及Compose文件声明(即使栈已停止也能显示规划中的端口)。 - 红绿灯网格:蓝色=已占用(正在监听或有容器映射)、琥珀色=已配置(
Compose声明但无监听)、绿色=搜索端口时推荐的附近空闲端口。 - 端口搜索与冲突检测:按端口号搜索并给出附近空闲替代方案;当多个项目在同一绑定地址发布相同主机端口时发出冲突警告。
- 常见端口内置命名:内置
SSH、Jellyfin、Postgres等常见homelab端口名称,并支持本地自定义覆盖文件。 - 多主机只读查看:一个
UI可拉取局域网 /Tailscale上其他Port-Light实例的占用地图(每台机器仍各自扫描自己)。 - 丰富的外观与语言:设置页支持
system/dark/light及Gruvbox、Catppuccin、Nord等十余种主题,UI语言支持中文(简/繁)、日文等。 - 可选 HTTP Basic Auth:通过
AUTH_USER/AUTH_PASSWORD启用登录保护。 - 开源免费:基于
MIT协议开源,可免费使用和修改。
应用场景
- Homelab 端口管理:同时运行几十个
Compose栈时,一眼看清哪些端口已被占用、哪些被规划但空闲,避免重复绑定报错。 - 新服务选址:部署新容器前,先搜索目标端口号,
Port-Light会列出附近可用的空闲端口作为备选。 - 冲突排查:发现容器启动失败或端口冲突时,快速定位是哪个项目占用了目标端口。
- 多机统一视图:在局域网 /
Tailscale内用单个UI聚合多台主机的端口占用地图,方便集中查看。

Port-Light 是一个 端口占用地图,而非容器管理器——它不启动/停止容器、不查看日志,也不会替代 Portainer
安装
在群晖上以 Docker 方式安装。
镜像同时发布在
Docker Hub与GHCR。本文以Docker Hub官方镜像stepaniah/port-light:latest为例。
在注册表中搜索 stepaniah ,选择第一个 stepaniah/port-light,版本选择 latest。
本文写作时,
latest版本对应为v0.6.0;

由于镜像需要挂载 /var/run/docker.sock 与 /proc:/host/proc 这类系统卷,群晖 Docker 套件无法图形化完成挂载,因此只提供 docker cli 与 docker-compose 两种安装方式。
docker cli 安装
如果你熟悉命令行,可能用 docker cli 更快捷
1 | # 新建文件夹 port-light 和 子目录 |
提示:
-v /proc:/host/proc:ro用于让容器读取宿主机进程网络命名空间,从而识别主机网络容器的端口;/var/run/docker.sock即使只读也具备较强权限,建议通过反向代理保护UI,或在不可信网络下使用Docker Socket代理。
docker-compose 安装
也可以用 docker-compose 安装,将下面的内容保存为 docker-compose.yml 文件
1 | version: '3.8' |
然后通过 SSH 登录到您的群晖,执行下面的命令:
1 | # 新建文件夹 port-light 和 子目录 |

运行
在浏览器中访问 http://<群晖IP>:2100 ,默认无需账号,打开即看到端口占用网格

可以对端口进行筛选

搜索时,会显示附近的端口,绿色为空闲端口

多主机场景可在「设置 → 占用图」中添加其他 Port-Light 实例地址,聚合查看

注意事项
- 局域网工具:默认无登录鉴权(除非设置
AUTH_USER/AUTH_PASSWORD),请勿直接暴露到公网,建议放在反向代理之后。 - docker.sock 权限:
/var/run/docker.sock即便只读也具备较强权限;若 UI 可能被不可信人员访问,优先使用Docker Socket代理。 - /proc 挂载:不挂载
/host/proc时,网格只能显示Docker容器名,无法读取主机进程名;ss -tlnp的进程名仍需宿主机网络 / 裸金属路径。 - 自定义文件先于挂载:若 bind mount
custom_ports.json,需先在宿主机上创建该文件,否则Docker会生成同名目录导致应用读取失败。 - 多主机为只读:每台机器仍各自运行
Port-Light,hub仅拉取其他实例数据;Docker桥接容器常无法访问Tailscale的100.x网段,建议使用局域网IP或给hub设置network_mode: host。
参考文档
StepaniaH/port-light: A web dashboard that shows your server’s port usage as a traffic-light grid.
地址:https://github.com/StepaniaH/port-lightstepaniah/port-light - Docker 镜像 | Docker Hub
地址:https://hub.docker.com/r/stepaniah/port-lightPort-Light 部署文档(Unraid / Podman / 反向代理 / 源码构建)
地址:https://github.com/StepaniaH/port-light/blob/main/docs/deployment.md