Skip to content

sunhao-java/docker-manager-ui

Repository files navigation

Docker Manager UI

License: MIT

基于 Go 1.26 + Vue 3 + TypeScript 构建的 Docker 运行时管理平台,提供直观的 Web 界面来管理 Docker 容器、Compose 项目、镜像、Swarm 集群、存储卷和网络等资源。

目录


核心特性

  • 多 Endpoint 管理:支持同时管理多个 Docker 实例,支持 Unix Socket 和 TCP(含 TLS)连接方式
  • 容器全生命周期管理:创建、启动、停止、删除、日志查看、WebSocket 终端、文件管理
  • Compose 项目编排:项目 CRUD、一键 up/down、远程 YAML 拉取,基于 Docker SDK 直接操作(无需宿主机安装 docker-compose)
  • 镜像与仓库管理:镜像拉取/推送/打标签、多仓库配置(Docker Hub / Harbor)
  • Swarm 集群管理:集群初始化/加入/离开、节点管理、服务编排与扩缩容
  • 存储与网络管理:卷和网络的创建/删除/清理、卷文件浏览器
  • 完善的安全体系:RBAC 三级角色、2FA(TOTP)、Passkey、审计日志
  • 响应式设计:支持桌面端与移动端访问,自动适配屏幕尺寸

技术栈

层级 技术
后端 Go 1.26、Gin、GORM、MySQL/SQLite、Docker SDK
前端 Vue 3、TypeScript、Vite、Pinia、Element Plus
部署 Docker Compose(单容器 App,MySQL 可选 profile)

项目结构

.
├── backend
│   ├── cmd/server              # 后端入口
│   ├── internal                # 业务代码(handler/service/repo/model 等)
│   ├── migrations              # 数据库迁移脚本(按版本递增)
│   ├── configs                 # 配置文件(example/docker/local)
│   └── scripts/init.sql        # 手工初始化脚本(可选)
├── web
│   ├── src/views               # 页面
│   ├── src/components          # 组件
│   ├── src/api                 # 前端 API 封装
│   └── src/store               # Pinia 状态管理
└── docker-compose.yml          # 本地一键启动

菜单结构

首页
容器管理
Compose
镜像管理
  ├── 镜像管理
  └── 仓库
集群(Swarm)管理
  ├── 节点管理
  └── 服务管理
存储 & 网络
  ├── 存储管理
  └── 网络管理
系统管理
  ├── Docker 服务端管理
  ├── 用户管理
  ├── 审计日志
  ├── 安全设置
  └── 系统设置

部署与安装

前置条件

  • Docker 和 Docker Compose 已安装可用
  • 宿主机可访问 Docker Socket(默认 /var/run/docker.sock
  • 本地开发(非容器)需要:Go 1.26.0、Node.js >= 18(可选 MySQL 8.x,也可直接使用 SQLite)

方式一:Docker Compose 一键部署(推荐)

# 克隆项目
git clone <仓库地址>
cd docker-manager-ui

# 一键启动(默认不启动 MySQL)
docker compose up -d --build

# 如需同时启动 MySQL(可选)
docker compose --profile mysql up -d --build

启动后的访问地址:

服务 地址 说明
统一入口 http://localhost:8080 前后端合并后的单入口(推荐访问)
后端 API http://localhost:8080/api/v1 API 前缀
MySQL localhost:3306(仅 mysql profile 时) 用户 root,密码 root,库 docker_manager

Compose 默认会为应用挂载数据卷到 /app/docker-manager-ui/data,用于持久化:

  • 初始化生成的配置文件(config.yaml
  • 初始化管理员种子文件(一次性,使用后自动清理)
  • SQLite 数据库文件(当数据库类型选择 sqlite 时)

停止服务:

docker compose down

首次启动访问任意页面会自动跳转到 /init 初始化页。在该页面需完成:

  1. 数据库类型选择(MySQL / SQLite)
  2. 数据库连接信息填写(MySQL)或 SQLite 文件名填写
  3. JWT、Passkey 等基础安全配置
  4. 初始化管理员账号信息

提交后系统会自动写入 /app/docker-manager-ui/data/config.yaml 并自动重启服务。

如果初始化时选择 MySQL,请确保使用 --profile mysql 启动,并在初始化页将 MySQL 主机填写为 docker-manager-mysql(默认)。

方式二:本地分开启动

适用于需要调试或二次开发的场景。

# 1. 准备后端配置(首次)
cd backend
cp configs/config.example.yaml configs/config.local.yaml

# 2. 选择数据库模式
# A. MySQL 模式:database.type=mysql,并填写 mysql.dsn(后端启动时会自动建库)
# B. SQLite 模式:database.type=sqlite,默认会在项目根创建 docker-manager-ui.sqlite3

# 3. 启动后端
go run ./cmd/server

# 4. 启动前端(新终端窗口)
cd web
npm install
npm run dev

提示:后端启动时会自动完成数据库初始化: 首次按 ORM 模型自动建表并写入基线版本,后续自动执行 backend/migrations 下新增的增量 SQL。 backend/scripts/init.sql 仅用于极端场景下的手工建库,不是运行时必需步骤。

Vite 开发服务器将 /api 请求(含 WebSocket)代理到 http://localhost:8080,前后端可独立启动,前端直接访问 localhost:5173 即可调通 API。

初始化管理员

默认建议管理员用户名为 admin,但首次部署请在 /init 页面自行设置管理员密码与邮箱。 初始化完成后,后端会使用该信息创建首个管理员账号。


登录与认证

登录流程

  1. 打开浏览器访问 http://localhost:8080(Docker)或 http://localhost:5173(本地开发)
  2. 输入用户名和密码
  3. 点击「登录」按钮
  4. 如果管理员启用了强制安全设置,首次登录后需前往个人中心完成 2FA 或 Passkey 的绑定

两步验证(2FA)

系统支持基于 TOTP 的两步验证:

  1. 前往 个人中心 页面
  2. 在两步验证区域点击「绑定」
  3. 使用 Google Authenticator、Microsoft Authenticator 等应用扫描二维码
  4. 输入应用上显示的 6 位验证码完成绑定
  5. 绑定后每次登录都需要输入验证码

Passkey(通行密钥)

系统支持 WebAuthn/Passkey 无密码登录:

  1. 前往 个人中心 页面
  2. 在 Passkey 区域点击「注册通行密钥」
  3. 按照浏览器提示完成生物识别或安全密钥验证
  4. 注册成功后可在登录页使用 Passkey 直接登录

主题切换

页面右上角提供主题切换按钮,支持三种模式:

  • 浅色模式:明亮的界面风格
  • 深色模式:暗色的界面风格
  • 跟随系统:自动跟随操作系统的主题设置

功能说明

首页仪表盘

登录后默认进入首页仪表盘,展示当前选中 Endpoint 的 Docker 运行时概览:

  • 资源统计:容器、镜像、卷、网络等资源数量
  • 容器状态分布:运行中 / 已停止 / 其他状态的容器占比
  • 系统信息:Docker 版本、操作系统、内核版本等

切换 Docker Endpoint:点击页面顶部的 Endpoint 下拉选择器,选择目标 Docker 实例,切换后页面数据自动刷新。


容器管理

路径:侧栏菜单 → 容器管理

容器列表

  • 支持按容器名称搜索
  • 支持按状态(运行中/已停止/全部)筛选
  • 每个容器卡片显示:名称、镜像、状态、端口映射、创建时间
  • 操作按钮:启动、停止、重启、删除

创建容器

点击页面右上角「创建容器」按钮,支持两种创建方式:

参数化创建 — 通过表单逐项填写:

配置区域 可配置项
基础配置 容器名称、镜像、重启策略
端口映射 宿主机端口 ↔ 容器端口
卷挂载 本地路径/命名卷 → 容器路径、读写模式
环境变量 KEY=VALUE 键值对
网络配置 选择已有网络或使用默认网络
高级设置 资源限制(CPU/内存)、命令覆盖、入口点等

原始命令创建 — 直接粘贴 docker run 命令,系统自动解析为容器配置并创建。

容器详情

点击容器名称进入详情页,包含以下标签页:

  • 概览:基础信息(ID、镜像、状态、IP)、端口映射、挂载点、环境变量
  • 日志:实时查看标准输出/错误输出,支持时间范围筛选和搜索
  • 终端:通过 WebSocket 连接容器内部终端(/bin/sh/bin/bash),支持终端大小自适应
  • 文件管理:浏览容器内文件系统,支持文件上传、下载、删除

容器回收站

删除的容器进入回收站,默认保留 7 天,保留期内可恢复,超期自动永久删除。


Compose 管理

路径:侧栏菜单 → Compose

项目列表

展示当前 Endpoint 下的所有 Compose 项目(名称、状态、容器数量),支持一键 up / down / 重启。

创建项目

  1. 编辑器模式:直接在内置 YAML 编辑器中编写 docker-compose.yml
  2. 远程拉取:输入远程 YAML 文件的 URL,系统自动拉取内容

Compose 功能通过 Docker SDK 直接与 Docker Engine API 交互,无需宿主机安装 docker-composedocker compose 插件,适用于 distroless 等精简容器环境。

项目详情

查看和编辑 YAML 配置、查看项目下所有容器状态、执行 up / down / restart 操作。

Compose 回收站

与容器回收站类似,删除的 Compose 项目进入回收站,默认保留 7 天。


镜像管理

镜像列表

路径:侧栏菜单 → 镜像管理镜像管理

展示当前 Endpoint 下的所有本地镜像(名称/标签、大小、创建时间)。

支持的操作:

  • 拉取镜像:输入镜像名称和标签(如 nginx:latest),从配置的仓库拉取
  • 删除镜像:移除本地镜像
  • 打标签:为已有镜像添加新的标签名
  • 推送镜像:将本地镜像推送到指定仓库

点击镜像名称可查看该镜像的所有标签及版本信息。

仓库管理

路径:侧栏菜单 → 镜像管理仓库

  • 支持 Docker Hub 和 Harbor 类型
  • Docker Hub 支持配置代理地址(国内加速镜像)
  • 可配置仓库地址、认证凭据
  • 拉取镜像时可选择从指定仓库拉取

Swarm 集群管理

路径:侧栏菜单 → 集群(Swarm)管理

Swarm 服务管理菜单仅在当前节点角色为 Manager 时显示。

节点管理

路径:集群(Swarm)管理节点管理

  • 初始化集群:点击「初始化集群」按钮,配置监听地址,完成后当前节点成为 Manager
  • 加入集群:输入 Manager 节点的加入令牌和地址,选择角色(Manager / Worker)
  • 节点列表:查看所有节点的角色、状态(Ready / Down)、可用性,支持移除离线节点
  • 离开集群:当前节点退出 Swarm 集群

服务管理

路径:集群(Swarm)管理服务管理

服务列表:展示集群中所有服务的名称、镜像、副本数、更新状态。

创建服务

配置区域 可配置项
基础配置 服务名称、镜像、副本数
端口映射 发布端口、目标端口、协议(TCP/UDP)
卷挂载 挂载源、目标路径、读写模式
环境变量 KEY=VALUE 键值对
网络配置 选择 Overlay 网络
更新策略 并发更新数、更新延迟、失败处理策略
资源限制 CPU 和内存限制/预留
调度约束 节点标签约束、放置偏好

其他操作

  • 编辑服务:修改配置并触发滚动更新
  • 扩缩容:调整副本数量,集群自动调度
  • 暂停/恢复:暂停将副本缩至 0 但保留定义,恢复时恢复到暂停前的副本数
  • 导出 YAML:将服务配置导出为 YAML 格式
  • 失败实例清理:清理服务中失败或已退出的容器实例

存储与网络

存储卷管理

路径:侧栏菜单 → 存储 & 网络存储管理

  • 卷列表:展示所有存储卷(名称、驱动、挂载点、创建时间)
  • 创建卷:输入卷名称,选择驱动类型(默认 local),可选配置驱动参数
  • 卷文件浏览器:以树形结构浏览卷内文件,支持文件预览、上传和下载
  • 清理未使用的卷:一键删除所有未被任何容器使用的卷

网络管理

路径:侧栏菜单 → 存储 & 网络网络管理

  • 网络列表:展示所有 Docker 网络(名称、驱动类型、子网、网关、关联容器数)
  • 创建网络:选择驱动(bridge / overlay / macvlan 等),可选配置子网和网关
  • 删除网络:系统默认网络(bridge、host、none)不可删除
  • 清理未使用的网络:一键删除所有未被任何容器使用的自定义网络

系统管理

路径:侧栏菜单 → 系统管理

Docker 服务端管理(Endpoint)

管理系统连接的 Docker 实例:

  • 添加 Endpoint
    • Unix Socket:填写 Socket 路径(如 /var/run/docker.sock
    • TCP:填写主机地址和端口(如 tcp://192.168.1.100:2376
    • TCP + TLS 需上传 CA 证书、客户端证书和客户端密钥
    • 测试连接确认可用后保存
  • 编辑/删除:修改配置或移除 Endpoint(默认 Endpoint 不可删除)

用户管理(仅 admin 可见)

  • 用户 CRUD:创建用户、分配角色(admin / operator / viewer)
  • 重置密码、启用/禁用用户账号

审计日志(仅 admin 可见)

记录系统中所有关键操作,支持按时间范围、操作人、操作类型等条件筛选,支持分页浏览。

安全设置

系统级安全策略配置(仅 admin 可操作):

  • 强制两步验证:启用后所有用户必须绑定 TOTP
  • 强制 Passkey:启用后所有用户必须注册通行密钥
  • 安全策略启用后,未完成绑定的用户登录后会被引导至个人中心完成设置

系统设置

站点级别的系统配置:站点名称与 Logo、ICP 备案信息、版权声明文字。


角色与权限说明

系统采用 RBAC(基于角色的访问控制)模型,内置三种角色:

  • admin(系统管理员):拥有全部权限,可管理用户、Endpoint 与安全策略
  • operator(运维角色):面向日常运维,可操作容器、Compose、镜像、集群与存储网络,不可管理用户与安全策略
  • viewer(只读角色):仅可查看资源与状态,不允许执行创建、修改、删除等写操作

权限对照表

功能 admin operator viewer
仪表盘
容器读取
容器操作
Compose 读取
Compose 操作
镜像读取
镜像操作
Swarm 读取
Swarm 操作
存储网络读取
存储网络操作
Endpoint管理
用户管理
安全设置
审计日志
系统设置

开发指南

常用命令

# 全栈(Docker Compose)
docker compose up -d --build
docker compose down

# 多架构镜像构建并推送(交互式)
./build_and_push_image

# 后端
cd backend
go run ./cmd/server                                      # 本地运行
go run ./cmd/server -config configs/config.local.yaml    # 指定配置
go test ./...                                            # 运行全部测试
go test ./internal/docker/ -run TestHostNormalizer       # 运行单个测试
gofmt -w .                                               # 格式化(提交前必须执行)

# 前端
cd web
npm install
npm run dev           # 开发服务器 http://localhost:5173
npm run build         # 类型检查(vue-tsc --noEmit)+ Vite 构建

多架构镜像构建与推送(交互式)

在项目根目录执行:

./build_and_push_image

脚本会交互式要求输入:

  • 目标 CPU 架构(枚举,可单选或多选)
  • 仓库地址(仅 registry,例如 ghcr.io;留空默认 Docker Hub)
  • 镜像仓库名(可包含命名空间)
  • 镜像 Tag

说明:脚本固定执行推送(docker buildx build --push)。当前枚举支持 linux/amd64linux/arm64Dockerfile 会按目标平台编译 Go 二进制,避免不同 CPU 架构镜像内二进制不匹配。


配置说明

配置文件 用途
backend/configs/config.local.yaml 本地开发配置(可按团队约定提交)
backend/configs/config.example.yaml 示例模板(已提交)
data/config.yaml 初始化流程生成的运行时配置(由容器挂载卷持久化)

关键配置项:

配置项 说明 示例值
database.type 数据库类型(mysql/sqlite mysql
mysql.dsn MySQL 连接串(MySQL 模式生效) root:root@tcp(127.0.0.1:3306)/docker_manager?charset=utf8mb4&parseTime=True&loc=Local
sqlite.path SQLite 文件路径(SQLite 模式生效) docker-manager-ui.sqlite3(在项目根目录创建)
jwt.access_secret 访问令牌密钥 替换为强随机字符串
jwt.refresh_secret 刷新令牌密钥 替换为强随机字符串
jwt.access_ttl_min 访问令牌有效期(分钟) 180
jwt.refresh_ttl_hour 刷新令牌有效期(小时) 24(1 天)
security.passkey_rp_id Passkey RP ID localhost
security.passkey_rp_origin Passkey RP Origin http://localhost:5173
server.port 后端监听端口 8080

安全提示:示例配置中的 JWT 密钥仅用于演示,生产环境务必替换为强随机值。


常见问题

Q1:容器终端无法连接?

原因:WebSocket 连接可能被代理拦截。

解决方案

  • 确保反向代理(如 Nginx)已正确配置 WebSocket 转发
  • 检查浏览器是否允许 WebSocket 连接
  • 确认后端服务正常运行且端口可达

Q2:Compose 功能的实现方式?

说明:Compose 功能通过 Docker SDK(github.com/docker/docker)直接调用 Docker Engine API,自行解析 docker-compose.yml 并按 depends_on 拓扑排序依次创建网络、卷和容器。

优势

  • 无需宿主机安装 docker-composedocker compose 插件
  • 适用于 distroless、Alpine 等精简容器环境
  • 通过 Docker Engine API 远程操作,支持多 Endpoint 场景

当前支持的 Compose 特性

  • services(image、ports、volumes、environment、depends_on、networks、restart、labels 等常用字段)
  • networks(driver、ipam、external)
  • volumes(driver、external)
  • depends_on 拓扑排序启动

暂不支持

  • build(需在本地构建镜像后使用 image 引用)
  • extendsprofilesconfigssecrets 等高级特性

Q3:切换 Endpoint 后数据未更新?

解决方案

  • 等待页面自动刷新,或手动刷新页面
  • 检查目标 Endpoint 连接是否正常(前往系统管理 → Docker 服务端管理检查状态)

Q4:启用强制 2FA 后无法登录?

原因:管理员启用了强制两步验证策略,但用户尚未绑定 TOTP。

解决方案

  • 登录后系统会自动跳转到个人中心
  • 按照页面提示完成 TOTP 绑定后即可正常使用

Q5:TCP 方式连接 Docker 失败?

解决方案

  • 确认目标 Docker Daemon 已开启 TCP 监听
  • 如果启用了 TLS,确保上传了正确的 CA 证书、客户端证书和密钥
  • 检查网络连通性和防火墙规则
  • Docker Daemon 配置参考:/etc/docker/daemon.json

Q6:生产环境部署注意事项?

  • JWT 密钥:务必替换默认的 JWT 签名密钥为强随机值
  • 默认密码:首次登录后立即修改 admin 默认密码
  • Docker Socket:确保后端容器挂载了宿主机的 Docker Socket
  • TLS 加密:建议使用 HTTPS 和 TLS 保护前端和 API 通信
  • 数据库备份:MySQL 模式定期备份数据库;SQLite 模式定期备份数据库文件
  • Passkey 配置:生产环境需正确配置 passkey_rp_idpasskey_rp_origin 与实际域名一致

注意事项

  • 后端需要访问宿主机 Docker:请确保挂载 /var/run/docker.sock
  • 业务接口默认从请求头 X-Docker-Endpoint-Id 读取目标 Endpoint(也支持部分接口通过参数传入)。
  • Compose 功能基于 Docker SDK 实现,无需宿主机安装 docker-compose 二进制,可在 distroless 容器中正常运行。
  • 示例配置中的 JWT 密钥仅用于演示,生产环境务必替换为强随机值。
  • Passkey 当前为基础接入流程,生产建议补齐完整 WebAuthn 验签链路。

开源协议

本项目使用 MIT License 开源,允许个人和企业在保留原始版权与许可声明的前提下自由使用、修改、分发和再发布。


友链

  • linux.do:面向开发者与技术爱好者的开源技术社区,涵盖 Linux、容器、服务器、开发工具、AI 与效率工作流等话题,适合交流实践经验与获取一线使用反馈。

About

基于 Go 1.26 + Vue 3 + TypeScript 构建的 Docker 运行时管理平台,提供直观的 Web 界面来管理 Docker 容器、Compose 项目、镜像、Swarm 集群、存储卷和网络等资源。

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors