Docker 部署导航面板:自动发现容器并生成可点击入口
如果目标是“自动发现 Docker 服务、读取宿主机发布端口,并生成可点击访问地址”,当前最贴合的选择是 Dockpeek。Homarr 更适合可视化看板、多用户权限和服务组件;Homepage 更适合用 Docker Labels 和配置文件维护导航。三者解决的问题有重叠,但自动解析端口的完成度不同。
本文按 2026-08-26 可读取的官方资料整理。示例配置只做静态说明,没有在本机启动这些面板;文中的验收命令是部署者执行后应观察的结果,不代表本机实测。
部署结论
| 项目 | 本文采用的值 |
|---|---|
| GitHub 地址 | dockpeek/dockpeek |
| 官方镜像 | dockpeek/dockpeek:latest;镜像和 tag 以项目 README 为准,生产环境应固定已核验版本或摘要 |
| 正式部署 | Docker Compose,单容器导航面板 |
| 快速体验 | 不提供独立 docker run 路径;本文重点是端口发现、链接生成和安全边界 |
| 对外端口 | 宿主机 3420 → 容器 8000 |
| 持久化位置 | 本文未声明持久化卷,按目标版本文档确认 |
| 验证范围 | 官方资料和 Compose 配置静态审阅;未启动面板或访问真实 NAS |
| 资料核对日期 | 2026-08-26 |
本文选择 Dockpeek 作为部署示例,是因为它把容器发现、发布端口和公共主机名放在同一条配置路径中;latest 只用于跟随项目示例,长期运行前应重新核对版本和摘要。
1. 先理解“自动生成地址”
Docker 中有三个容易混淆的地址:
| 地址 | 示例 | 能否直接给浏览器访问 |
|---|---|---|
| 容器内部端口 | 80/tcp | 通常不能,浏览器在宿主机或其他设备上无法直接使用 |
| 宿主机发布端口 | 8080:80 | 可以尝试访问 宿主机地址:8080 |
| 反向代理地址 | https://app.example.com | 通常是用户最终应该点击的地址 |
面板可以从 Docker API 读到容器和端口映射,但不一定知道用户希望使用哪个 IP、域名、HTTPS 证书或反向代理路径。因此,“读取 published port”与“推断最终 URL”是两个步骤:
- 读取
8080:80这样的宿主机端口映射。 - 用配置的宿主机 IP/域名拼接地址;遇到反向代理时,用显式自定义链接覆盖自动结果。
这也是为什么有些面板能显示端口,却仍要求手动填写链接。
2. 面板能力对比
| 面板 | 自动发现 Docker 容器 | 自动读取发布端口并生成链接 | 配置方式 | 更适合 |
|---|---|---|---|---|
| Dockpeek | 支持 | 支持;可设置公共主机名,也可用 Labels 覆盖 | Web 界面 + 环境变量/Labels | 以 Docker 服务入口和端口导航为中心 |
| Homarr | 支持 Docker 集成 | 可显示容器和端口,但“Add to Homarr”仍需由管理员确认 Web 地址 | Web 拖拽配置 | 多看板、组件、用户组和权限 |
| Homepage | 支持 Docker 集成 | 通常需要在 YAML 或 Labels 中声明 href | YAML/Labels | 配置即代码、可进 Git、自动维护 |
| Flame | 有 Docker 相关能力 | 不作为自动端口解析首选,通常需要额外配置 | Web/Labels | 轻量书签首页 |
| Portainer | 支持 | 能查看端口,但主要是容器管理,不是导航首页 | Web 管理界面 | 容器编排、日志和生命周期管理 |
Glance 更偏 RSS、天气和监控信息流,Dashy 更偏主题和布局定制,Heimdall 更偏传统书签入口。它们可以作为首页,但都不是“扫描 Docker published ports 并批量生成链接”的优先选择。
2.1 Dockpeek:最匹配端口自动化需求
Dockpeek 官方 README 将它定位为 Docker dashboard,提供容器 Web 入口、日志、端口监控、镜像更新检查和多主机管理。它会自动发现 Traefik Labels,并自动检测已发布端口;DOCKER_HOST_PUBLIC_HOSTNAME 用于生成可点击链接时指定宿主机 IP 或域名。
它还提供以下 Labels:
labels:
- dockpeek.link=https://jellyfin.example.com
- dockpeek.ports=8096,8920
- dockpeek.https=8920
- dockpeek.tags=media,production2
3
4
5
- 没有反向代理时,通常让 Dockpeek 根据发布端口生成地址。
- 有反向代理时,用
dockpeek.link指向最终域名。 - 没有标准端口映射、使用 Host 网络或端口隐藏在代理后面时,用
dockpeek.ports补充显示端口。
2.2 Homarr:功能丰富,但不是零配置端口导航
Homarr 的 Docker 集成支持查看容器、实时日志、CPU/内存列,以及启动、停止、重启和删除等操作。它可以批量选择容器并执行 Add to Homarr,但官方流程仍要求在弹窗中填写或确认这些容器的 Web 地址。
Homarr 的优势在于:
- 多个 Board,可按影音、运维、家庭成员分组;
- 拖拽布局和独立的移动端布局;
- 本地账号、OIDC、LDAP、用户组和细粒度权限;
- 大量服务集成和信息组件;
- SQLite 实例支持整库备份与恢复。
所以它适合“导航 + 信息看板 + 权限管理”,但若第一要求是自动从端口生成链接,Dockpeek 更直接。
2.3 Homepage:自动发现依赖配置约定
Homepage 适合把导航配置写进 Git。它可以通过 Docker 集成读取容器状态,也可以用 Labels 声明名称、分组、图标和 href。这种方法可重复、可审查,但 URL 通常仍由使用者提供,并不是单纯读取 8080:80 后猜测最终域名。
当服务统一经过 Traefik、Caddy 或 Nginx Proxy Manager,并且每个服务都有固定域名时,Homepage 的配置即代码方式很有价值;当端口经常变化或服务数量动态增长时,维护链接的工作量会增加。
3. Dockpeek 部署
3.1 准备条件
- 一台运行 Docker Engine 的 Linux/NAS 主机;
- 已确认 Dockpeek 使用的端口没有被占用;
- 明确访问者使用的宿主机 IP、局域网 DNS 名称或反向代理域名;
- 为
SECRET_KEY和登录密码准备安全值,不把真实密钥写进公开文章或 Git。
3.2 Docker Compose
下面的配置采用官方 README 的端口和挂载方式,并把敏感值改成环境变量占位符:
services:
dockpeek:
image: dockpeek/dockpeek:latest
container_name: dockpeek
restart: unless-stopped
ports:
- "3420:8000"
environment:
SECRET_KEY: ${DOCKPEEK_SECRET_KEY}
USERNAME: ${DOCKPEEK_USERNAME:-admin}
PASSWORD: ${DOCKPEEK_PASSWORD}
DOCKER_HOST_PUBLIC_HOSTNAME: ${DOCKER_HOST_PUBLIC_HOSTNAME}
volumes:
- /var/run/docker.sock:/var/run/docker.sock2
3
4
5
6
7
8
9
10
11
12
13
14
在同目录的 .env 中填入本机实际值,并限制文件权限:
DOCKPEEK_SECRET_KEY=replace-with-a-random-secret
DOCKPEEK_USERNAME=admin
DOCKPEEK_PASSWORD=replace-with-a-strong-password
DOCKER_HOST_PUBLIC_HOSTNAME=192.168.1.1002
3
4
启动:
docker compose up -d
docker compose ps
docker compose logs --tail=100 dockpeek2
3
浏览器打开 http://192.168.1.100:3420。成功条件是能登录,并看到 Docker 主机上的容器、发布端口和端口链接。
生产环境不应无条件跟随 latest 自动升级。先备份配置、固定经过验证的镜像标签或摘要,再手动更新并检查回滚路径。
4. 从容器到可点击链接的使用流程
第一步:检查容器是否真的发布了端口
docker ps --format 'table {{.Names}}\t{{.Ports}}\t{{.Status}}'
docker port <container-name>2
若 docker port 没有输出,说明没有标准的宿主机端口映射。此时面板无法凭空生成一个浏览器入口,需要给容器增加 ports、使用反向代理,或设置自定义链接。
第二步:确认自动生成的主机地址
如果面板显示的是 localhost、Docker 内部主机名或错误的局域网地址,设置 DOCKER_HOST_PUBLIC_HOSTNAME。这个值必须是“打开链接的客户端能够访问”的地址,不一定是 Dockpeek 容器自己能解析到的名字。
第三步:为反向代理服务设置覆盖链接
services:
app:
image: example/app:latest
ports:
- "8080:8080"
labels:
- dockpeek.link=https://app.example.com2
3
4
5
6
7
这样做可以避免面板生成 http://宿主机:8080,而是直接打开用户真正使用的 HTTPS 域名。
第四步:验证链接的可达性
从实际使用面板的设备执行:
curl -I http://192.168.1.100:8080若使用 HTTPS 或反向代理,则检查最终域名:
curl -I https://app.example.com面板能显示端口不等于应用一定可访问。还要检查监听地址、防火墙、ACL、DNS、TLS 证书和反向代理规则。
5. Docker Socket 安全边界
Dockpeek、Homarr 的 Docker 管理功能都需要访问 Docker API。直接挂载 /var/run/docker.sock 的权限很高,恶意或被攻破的面板可能借此启动、停止、删除容器,甚至进一步影响宿主机。
建议按风险从低到高处理:
- 只在可信内网开放面板,并为面板设置强密码。
- 不需要容器控制时,不启用管理动作或不挂载 Socket。
- 使用 Docker Socket Proxy,只开放容器发现、状态和必要的端点。
- 需要启动/停止或更新容器时,再单独放行对应操作,并接受其安全代价。
Socket Proxy 可能导致部分 Dockpeek 管理功能不可用,这是权限限制的结果,不应为了“全功能”直接放开全部 Docker API。
6. 按需求选择
| 你的首要需求 | 推荐 | 原因 |
|---|---|---|
| 自动读取发布端口并点击跳转 | Dockpeek | 端口映射、公共主机名和自定义链接都是核心功能 |
| 统一域名、配置进 Git | Homepage | Labels/YAML 可审查、可复制、可版本化 |
| 拖拽看板、服务组件和多用户权限 | Homarr | 看板和权限模型比轻量导航更完整 |
| 只想要简单书签 | Flame 或 Heimdall | 功能较少,维护成本低 |
| 影音/RSS/天气/监控混合首页 | Glance 或 Homarr | 信息组件比端口扫描更重要 |
| 同时管理容器生命周期 | Portainer 或 Dockpeek | 管理功能比纯导航面板更重要 |
一个实用的组合是:Dockpeek 负责自动发现 Docker 服务和端口,反向代理负责稳定域名,Homarr 或 Homepage 负责人工整理后的长期首页。如果不想维护两个入口,直接使用 Dockpeek;如果希望首页高度定制,则保留 Homarr/Homepage,并把 Dockpeek 当作动态服务清单。
7. 常见问题
看不到容器
检查 Socket 是否挂载、Dockpeek 是否运行在预期的 Docker 主机上,以及 Socket Proxy 是否放行了容器列表接口。多主机配置还要逐个确认 Docker API 地址和网络连通性。
能看到端口,但点击打不开
先在客户端执行 curl。重点检查端口是否只绑定到 127.0.0.1、防火墙是否放行、应用是否只监听容器内部地址,以及生成链接使用的 DOCKER_HOST_PUBLIC_HOSTNAME 是否正确。
应该打开域名,却生成了 IP 加端口
给容器添加 dockpeek.link,或在面板的服务配置中使用自定义地址。反向代理地址无法可靠地从普通 Docker 端口映射中推断出来。
一个容器有多个端口
Dockpeek 可以显示多个发布端口;但哪个端口是 Web 管理界面要由应用文档决定。必要时用 dockpeek.ports 补充端口,并用 dockpeek.link 指定唯一入口。
总结
这篇文章用 Docker Compose 部署 Dockpeek,并把“发现端口”和“生成最终可访问 URL”拆成两个可验证步骤。面板能读取 Docker Socket 不代表客户端一定能访问生成的地址,反向代理、监听地址和网络权限仍需在目标环境中验收。
8. 资料与验证边界
- Dockpeek 官方 README:核对自动端口映射、
DOCKER_HOST_PUBLIC_HOSTNAME、Labels、Compose 端口和 Socket Proxy 说明;读取日期 2026-08-26。 - Homarr 官方 Docker 集成:核对 Docker 集成、容器管理、批量 Add to Homarr 和手动填写 Web 地址的流程;读取日期 2026-08-25。
- Homarr 官方 Docker 安装:核对端口
7575、/appdata和 Docker Socket 为可选挂载;读取日期 2026-08-25。 - Homarr 官方看板文档:核对多看板、响应式布局和权限边界;读取日期 2026-08-25。
- Homarr 官方备份文档:核对 SQLite 备份与恢复限制;读取日期 2026-08-25。
- Homepage 官方文档:用于配置即代码和 Docker 集成方向的选型参考;具体字段应以当前版本文档为准。
- Flame 官方仓库、Glance 官方仓库、Dashy 官方仓库、Heimdall 官方仓库 和 Portainer 官方文档:用于替代方案定位,不把它们描述为自动端口导航实现。
本文没有在真实 NAS、反向代理或多主机环境执行部署和恢复演练。Dockpeek 的自动 URL 是否可达,仍取决于宿主机绑定地址、客户端网络和反向代理配置;这些条件需要在目标环境中逐项验收。