better-staridc-MNBT
1---
2title: Docker 容器服务
3description: Docker 容器托管模块的架构、数据表、入口与到期软删流程
4---
5
6# Docker 容器服务(V1.83)
7
8基于宝塔面板 Docker 模块的容器托管能力,独立于主机业务,单容器模型。
9
10## 架构
11
12- **独立认证**:`docker/` 控制台使用独立 `docker_token` cookie,与 `admin_token`/`user_token` 隔离
13- **API 封装**:`MPHX/bt_docker.php`,GET 路由 `/btdocker/*`(签名入 query)+ POST 路由 `/mod/docker/com/*/stype`(签名入 body),与 `bt_api` 分离
14- **单容器模型**:每个 Docker 账户最多创建一个容器,`MN_docker_user.service_name/container_id` 锚定
15- **主题 scope**:`theme.php` 新增 `docker` scope,视图位于 `templates/{theme}/docker/`
16
17## 数据表
18
19| 表 | 说明 |
20|------|------|
21| `MN_docker_user` | Docker 用户(账号/密码/节点/套餐/容器锚点/到期软删字段) |
22| `MN_docker_plan` | 套餐(CPU/内存配额/价格) |
23| `MN_docker_order` | 订单(P0 预留,未接支付) |
24
25升级 SQL:`update/update_v183_docker.sql`(全新安装已在 `install/install.sql` 内置)
26
27## 入口
28
29| 路径 | 说明 |
30|------|------|
31| `docker/login.php` | Docker 用户登录 |
32| `docker/console.php` | 我的容器(状态/启停/安装日志轮询) |
33| `docker/appstore.php` | 应用商店(get_apps + create_app 异步安装) |
34| `docker/image.php` `docker/volume.php` `docker/compose.php` | 镜像/存储卷/Compose |
35| `docker/ajax.php` | 控制台 AJAX(gn=login/logout/my_container/container_*/app_*/install_log) |
36| `admin/docker.php` | 后台管理(用户/套餐/节点容器三 Tab) |
37| `admin/api/docker.php` | 后台 AJAX(docker_user_* / docker_plan_* / docker_node_*) |
38| `api/docker.php` | 对外开通 API(gn=kt,鉴权同 api/api.php) |
39| `docker_cron.php` | 到期软删定时任务(建议每 30 分钟:`/docker_cron.php?my=API密钥`) |
40
41## 到期软删流程
42
431. `active` 且到期 → `qk=expired`,`expired_at=到期时间`
442. `expired` 满 7 天 → cron 删除节点容器 → `qk=pruned`,`prune_due=当天`
453. `pruned` 满 7 天 → 物理删除用户行
46
47## create_app 异步安装
48
49应用安装为异步任务:提交后返回"等待 1-5 分钟初始化",前端轮询 `install_log`(`get_cmd_log`)跟进进度,`console.php` 每 8 秒刷新容器状态。
50
51## 鉴权说明
52
53- 控制台 cookie:`docker_token`,`authcode` 加密,`session_hash = md5(user_id . password_hash . SYS_KEY)`,改密后旧 cookie 失效
54- 密码:`password_hash`/`password_verify`(bcrypt)
55- CSRF:复用 `mnbt_csrf_*`,AJAX 携带 `_csrf` 或 `X-CSRF-TOKEN`
56
57---
58
59详细 API 见 ../api/docker.md,产品设计见 ../prd/docker.md