这两天一直在研究这个话题,踩了几个坑,把遇到的东西整理成文,供有需要的朋友参考。
Docker Compose 项目太多怎么管理?用 Dockge 集中管理 Stack,飞牛 NAS 实战
前言
Docker Compose 用久了以后,我越来越在意的不是“会不会写 YAML”,而是项目一多,配置文件、.env、启动命令和日志散在不同目录里,想改一个服务时总要先找路径、开终端、确认自己现在操作的是哪一套环境。Dockge 吸引我的地方,不是它能彻底替代命令行,而是它给原生 Compose 项目加了一层更直观的 Web 管理界面:Stack 还是 Stack,docker-compose.yml 也依然保留,只是启动、重启、编辑和查看状态这些高频动作能够集中到浏览器里完成。
这次我在飞牛 NAS 上实际部署 louislam/dockge:1.5.0,把 Web 端口映射到 7001,再把已有的 vaultwarden 和 exer 项目复制进 Dockge 的 stacks 目录,通过“扫描堆栈文件夹”让它接管现有 Compose 项目。确认本地管理正常以后,再用 cpolar 把 7001 页面映射到公网,先验证随机地址,最后切换到固定二级子域名 dockge。整个过程更像是给现有 Compose 工作流补一个管理面板,而不是重新发明一套容器管理方式。我更看重的是这种“不改原来习惯,只减少重复操作”的方式:Compose 文件依旧能直接打开,项目目录依旧能自己维护,Dockge 只是把常用动作收进一个页面。对于已经有不少自建服务的人来说,这比重新迁移到另一套封闭管理逻辑更容易接受。
1. Dockge 到底解决了什么坑?
Dockge 是一款面向 Docker Compose 的 Web UI 管理工具。
它的核心思路并不是绕开 Compose,而是把 Compose 项目,也就是 stacks,集中到浏览器里管理。
常见操作包括:
- 查看现有 Stack;
- 在线编辑 Compose 配置;
- 启动、停止、重启和更新服务;
- 查看容器日志;
- 配合
.env使用环境变量; - 管理多个 Compose 项目。
docker-compose.yml 的人来说,这意味着不会因为用了 Web UI,就把原来的项目结构完全丢掉。
但“告别命令行”这句话也不能理解得太绝对——至少这篇安装过程本身仍然得 SSH、Docker 命令、目录复制和 Compose 启动。它真正减少的是后续日常管理时反复敲命令的频率。
2. 部署前先确认飞牛的 SSH 和 Docker
2.1 开启 SSH
先在飞牛设置里开启 SSH 服务。
然后通过终端连接到飞牛。
这一步核心是为了后面拉镜像、创建目录和启动 Dockge。
2.2 检查 Docker
使用下面的命令检查 Docker:
docker -v
systemctl status -v
也能够直接在飞牛主页查看 Docker 状态。
SSH 和 Docker 都正常以后,再继续安装 Dockge。
3. 拉取 Dockge 1.5.0 镜像
这次使用的版本是:
louislam/dockge:1.5.0
先拉取镜像:
docker pull louislam/dockge:1.5.0
版本号在这里是明确写死的,所以后续配置继续沿用 1.5.0,没有擅自换成 latest。
4. 创建目录并写入 Compose 配置
先创建 Dockge 目录:
mkdir -p /docker/dockge
cd /docker/dockge
接着创建:
docker-compose.yml
vi docker-compose.yml
Compose 内容如下:
services:
dockge:
image: louislam/dockge:1.5.0
restart: unless-stopped
ports:
- 7001:5001
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /data/dockge/data:/app/data
- /data/dockge/stacks:/opt/stacks
environment:
- DOCKGE_STACKS_DIR=/opt/stacks
这份配置里有几个关键关系:
- 镜像:
louislam/dockge:1.5.0 - 外部端口:
7001 - 容器端口:
5001 - Docker Socket:
/var/run/docker.sock:/var/run/docker.sock - Dockge 数据目录:
/data/dockge/data:/app/data - Stack 目录:
/data/dockge/stacks:/opt/stacks DOCKGE_STACKS_DIR=/opt/stacks- 重启策略:
unless-stopped
/docker/dockge,但 Compose 挂载的数据和 Stack 路径使用的是 /data/dockge/...。两者并不是同一个目录,复现时要按当前配置分别理解,不要混在一起。
5. 启动 Dockge 并确认本地页面
执行:
docker compose up -d
然后查看容器状态:
docker ps
容器启动后,在浏览器打开:
http://飞牛IP:7001
页面能正常打开,说明 7001:5001 的映射已经生效。
6. 第一次登录先设置账号密码
第一次进入 Dockge 时,先设置登录账号和密码。
登录以后,能够进入管理页面查看当前项目。
到这里,Dockge 本身已经跑起来了,但真正有用的下一步,是把原来就存在的 Compose 项目纳入它的 stacks 目录。
7. 把已有 Compose 项目交给 Dockge 管理
源环境里已经有 exer 项目,同时示例命令还复制了 vaultwarden。
把原项目目录复制到:
/data/dockge/stacks/
具体命令保持如下:
cp -a /docker/vaultwarden/ /data/dockge/stacks/vaultwarden/
cp -a /docker/exer /data/dockge/stacks/exer/
这组命令实际上同时复制了两个项目:
/docker/vaultwarden//docker/exer
docker-compose.yaml.env
8. 扫描 stacks 目录,让 Dockge 识别项目
复制完成以后,回到 Dockge 页面。
点击右上角账号图标,选择:
【扫描堆栈文件夹】
扫描完成后,可以看到项目被识别出来。
到这里,已有 Compose 项目才真正进入 Dockge 的管理范围。
这条链比“安装完 Dockge 就自动接管所有容器”更准确:
复制项目目录 → stacks 目录 → 扫描堆栈文件夹 → Dockge 识别项目。
9. 用 Web 界面完成一次重启验证
识别项目以后,可以直接在 Dockge 中执行重启。
这一步验证的是最实际的使用价值:原来得进入对应目录再执行 Compose 命令,现在可以在统一页面里完成常用操作。
我更愿意把 Dockge 理解成Compose 项目的控制台,而不是 Docker 本身的完全替代品。
10. 本地管理正常以后,再考虑远程访问
如果 Dockge 只在飞牛局域网里使用,7001 已经足够。
但如果人在外面还得查看或管理这些 Stack,就要再解决 Web 管理页面的公网入口。
这时 cpolar 只负责网络这一层:
Dockge 继续负责 Compose 项目管理,cpolar 只把本地 7001 页面提供到公网。
这两个职责分开以后,排错也更清楚。
11. 安装 cpolar
执行安装命令:
sudo curl https://get.cpolar.sh | sh
安装完成后检查服务状态:
sudo systemctl status cpolar
服务启动后,通过主机 IP + 9200 进入 cpolar Web 管理页面。
这里同时出现了两种访问写法:
http://ip:9200
以及:
http://localhost:9200/
两种地址的适用场景不同,实际访问时应以当前设备真正可达的管理地址为准。
12. 先用随机域名验证 7001
进入【隧道管理 → 创建隧道】,配置为:
- 隧道名称:
dockge - 协议:
http - 本地地址:
7001 - 域名类型:随机域名
- 地区:
China Top
创建成功后,在在线隧道列表中可以看到公网地址。
从其他设备访问。
Dockge 页面能够正常打开。
到这里,随机公网访问链已经成立:
Dockge 7001 → cpolar 随机公网地址 → 外部浏览器访问成功。
13. 长期使用,再换固定二级子域名
如果需要长期远程管理,固定地址更方便。
进入预留功能。
选择保留二级子域名。
地区记录为:
china Top
这次使用的名称是:
dockge
保留成功后,回到【隧道管理 → 隧道列表】,找到对应隧道并编辑。
修改为:
- 域名类型:二级子域名
Sub Domain:填写已经保留的二级子域名- 地区:
China Top
更新以后,在线隧道列表里的随机地址会切换成固定二级子域名。
最后再通过固定地址访问。
页面可以正常打开。
总结
Dockge 最适合解决的,不是“以后再也不用碰命令行”,而是已有的 Docker Compose 项目越来越多以后,日常管理缺少一个统一入口。
这次实际跑通的链路是:
飞牛 SSH → Docker → louislam/dockge:1.5.0 → 7001:5001 → 设置账号 → 复制 vaultwarden / exer 到 /data/dockge/stacks → 扫描堆栈文件夹 → Web 页面识别项目 → 重启验证 → cpolar → 随机公网地址 → 固定二级子域名 dockge。
其中几个技术细节值得单独记住:
- 安装目录:
/docker/dockge - Dockge 数据目录:
/data/dockge/data - Stack 目录:
/data/dockge/stacks - 容器内 Stack 目录:
/opt/stacks DOCKGE_STACKS_DIR=/opt/stacks- Docker Socket:
/var/run/docker.sock - Dockge 本地端口:
7001 - cpolar 管理端口:
9200 - 隧道名称:
dockge - 地区记录里同时出现
china Top与China Top - 固定二级子域名:
dockge
以上就是这次整理的全部内容,希望对你有所启发。如果有不同见解,欢迎在评论区交流讨论。
评论 (0)
暂无评论