Dockge:以 compose.yaml 为中心的 Docker 栈管理界面
一个精美的、易于使用的、反应式的自托管 docker compose.yaml 面向堆栈的管理器。
秒懂
- 它是什么?
- Dockge 是一个面向自托管用户的 Docker compose 栈管理器,它把 compose.yaml 文件当作核心,提供实时反馈的编辑与操作界面。本文基于其 README 与仓库信息,分析其设计取向、适用场景与边界。
- 适合谁用?
- Dockge 适合那些已经习惯用 compose.yaml 管理服务、并且希望有一个直观界面来编辑和操作这些文件的自托管用户。它不适合需要管理单个容器、网络或其他 Docker 资源的人,也不适合还在用 Debian Buster 或更旧系统的环境。
- 能商用吗?
- 可以。MIT 是宽松许可证:你可以使用、修改并销售基于它的软件,只需保留版权和许可证声明。
- 还在维护吗?
- 在维护。仓库最近一次提交在 144 天前。
- 用什么语言写的?
- 主要是 TypeScript(依据 GitHub 的语言统计)。
以上回答依据项目的 GitHub 数据(最近同步于 2026年9月14日)和我们的分析,不构成法律意见。
开源项目深度解析
它解决什么问题:compose 文件的界面化操作
Dockge 的定位很明确:它只做一件事,管理 Docker 的 compose.yaml 文件。作者在 README 里说,他之前用 Portainer 管理栈时,经常遇到部署时加载图标转圈几分钟没有进度,错误信息也不清楚。Dockge 就是为了解决这类体验问题而生的。它面向的是那些已经在用 docker compose 命令、但希望有一个更直观的界面来创建、编辑、启停和删除栈的用户。它不打算取代 Docker CLI 的全部功能,也不管理单个容器。换句话说,如果你已经习惯用 compose 文件描述服务,Dockge 就是给你一个更顺手的操作面板。
文件即真相:栈目录与 compose.yaml 的绑定
Dockge 的核心设计是文件结构。它不把 compose 文件藏在自己的数据库里,而是直接读取宿主机上的目录。默认的栈目录是 /opt/stacks,每个栈对应一个子目录,里面有一个 compose.yaml 文件。你在 Dockge 里做的任何修改,最终都写回这个文件。这意味着你可以随时用普通的 docker compose 命令去操作这些文件,Dockge 不会绑架你的配置。这种设计有一个实际好处:迁移和备份变得简单,你只需要复制整个栈目录。但代价是,如果你把 compose 文件放在其他位置,Dockge 就看不到它,除非你手动移动文件并点击“Scan Stacks Folder”。这个限制在 README 的 FAQ 里写得很清楚。
安装与配置:一条 curl 命令,两个关键参数
安装 Dockge 的方式很直接。你需要先创建两个目录,一个用于存放你的栈,另一个用于存放 Dockge 自身的 compose 文件。然后下载 compose.yaml 并启动。基本命令是:mkdir -p /opt/stacks /opt/dockge,然后 cd /opt/dockge,用 curl 下载 https://raw.githubusercontent.com/louislam/dockge/master/compose.yaml,最后 docker compose up -d。默认端口是 5001。如果你想自定义栈目录或端口,可以用 https://dockge.kuma.pet/compose.yaml?port=5001&stacksPath=/opt/stacks 这样的 URL 来生成配置。这里有一个重要的细节:如果不设置 PUID 和 PGID,栈文件的所有权默认是 root。README 明确警告,必须在 environment 里同时设置这两个变量,否则文件归属会出问题。这个配置点很容易被忽略,但它直接影响你后续用普通用户操作文件的便利性。
实时反馈与多代理:交互体验的亮点
Dockge 强调“reactive”,也就是实时响应。README 里说,Pull、Up、Down 的进度和终端输出都是实时显示的。这意味着你在界面上启动一个栈时,能看到拉取镜像的每一行日志,而不是一个无限转圈的图标。这正好回应了作者对 Portainer 的不满。另一个值得注意的功能是 1.4.0 版本加入的多代理支持。你可以通过多个代理管理不同 Docker 主机上的栈,所有操作都在同一个界面里完成。这解决了多主机管理的场景,但要注意,每个代理都需要单独配置,而且它们共享同一个 stacks 目录结构。如果你只有一台机器,这个功能可能用不上,但如果你有几台树莓派或云服务器,它就很有价值。
交互式终端与 docker run 转换:实用但有限
Dockge 内置了一个交互式 Web 终端,你可以直接在浏览器里进入容器或执行命令。这个功能对于快速调试很有用,但它不是完整的终端模拟器,功能上肯定不如 SSH 或 docker attach。另一个特色功能是把 docker run 命令转换成 compose.yaml。这个转换器可以帮你把现有的单容器命令迁移到 compose 格式,但 README 没有说明转换的覆盖范围。实际使用中,docker run 的参数非常多,有些复杂的网络或卷配置可能无法完美转换。如果你有大量历史 docker run 命令,这个功能可以作为起点,但最终你可能还是需要手动调整生成的 compose 文件。
限制与不适用的场景
Dockge 的第一个限制是它只支持 compose 文件。README 明确说,如果你想管理单个容器,应该用 Portainer 或 Docker CLI。第二个限制是操作系统兼容性。Debian 和 Raspbian 的 Buster 或更旧版本不被支持,Windows 也暂时不支持。这意味着如果你还在用旧系统,或者想在 Windows 上直接运行,Dockge 目前不是选项。第三个限制是目录绑定。compose 文件必须放在指定的 stacks 目录里,而且容器内的路径必须与宿主机一致,否则数据可能写入错误位置。README 用警告符号标注了这一点。最后,Dockge 本身需要 Docker 20 以上或 Podman,如果你用的是 docker-compose V1,命令要换成 docker-compose up -d。这些限制意味着,Dockge 不是万能的 Docker 管理工具,它只在一个狭窄的范围内做得好。
与 Portainer 的对比:专注与全面的取舍
Dockge 的作者在 README 里直接回答了“Dockge 是 Portainer 的替代品吗”这个问题。他的答案是:如果你只用 docker-compose,那么可以;如果你还需要管理网络、单个容器等,那么不可以。Portainer 是一个功能全面的 Docker 管理平台,涵盖容器、镜像、网络、卷、栈等几乎所有方面。Dockge 只聚焦于 compose 栈,但在这个领域,它提供了更好的实时反馈和更简洁的界面。两者的差异在于设计哲学:Portainer 试图覆盖一切,Dockge 选择做深而不是做广。如果你已经有一套 docker compose 工作流,Dockge 可能比 Portainer 更顺手;如果你需要的是一个统一管理所有 Docker 资源的工具,Portainer 仍然更合适。值得注意的是,README 说两者可以共存,你不需要二选一。
维护与升级:简单但需要留意所有权
Dockge 的升级命令很常规:cd /opt/dockge,然后 docker compose pull && docker compose up -d。它基于 Compose V2,所以只要你的 Docker 环境支持,升级过程应该顺畅。项目的许可证是 MIT,这意味着你可以自由使用和修改,但要注意,README 没有提供详细的贡献指南之外的维护说明。一个值得警惕的点是 PUID 和 PGID 的设置。如果你在升级后没有正确配置这两个变量,新创建的栈文件可能会以 root 身份写入,这会导致你后续用普通用户编辑时遇到权限问题。这是一个容易在升级过程中被忽略的细节。另外,Dockge 的版本发布节奏并不稳定,1.5.0 在 2025 年 3 月发布,而 1.4.2 在 2024 年 1 月,中间隔了一年多。如果你依赖频繁更新来修复 bug,可能需要调整预期。
编辑结论
Dockge 适合那些已经习惯用 compose.yaml 管理服务、并且希望有一个直观界面来编辑和操作这些文件的自托管用户。它不适合需要管理单个容器、网络或其他 Docker 资源的人,也不适合还在用 Debian Buster 或更旧系统的环境。在采用之前,你需要确认自己的 Docker 版本在 20 以上,并且认真设置 PUID 和 PGID,否则栈文件的所有权会默认是 root,这可能带来权限混乱。同时要清楚,Dockge 不会替你管理那些不在指定 stacks 目录里的 compose 文件,你需要手动迁移。如果你能接受这些边界,Dockge 的实时输出和文件直存方式会是一个比 Portainer 更轻量的选择。
社区笔记