Skip to content

Fix/audit 20261031 - #171

Closed
DongShull wants to merge 10 commits into
onlyLTY:latestfrom
DongShull:fix/audit-20261031
Closed

DongShull wants to merge 10 commits into
onlyLTY:latestfrom
DongShull:fix/audit-20261031

Conversation

@DongShull

Copy link
Copy Markdown

No description provided.

…康检查、webhook 通知、审计日志、定时自动更新白名单
此前开发但从未提交到仓库的内容,本次一并入库:

- internal/mcp/:内置 MCP 服务(Streamable HTTP /mcp,27 个 dc_* 工具,
  覆盖容器/镜像/备份恢复/进度/设置/自更新;Bearer / X-MCP-Token / ?token=
  三通道鉴权,恒定时间比较;MCP_TOKEN=off 可显式关闭)
  其中包含本次新增:dc_clean_images 批量清理工具、dc_update_container
  的 image 参数改可选、版本检查 FNOS 显式语义、备份工具失败清单返回
- skills/dockercopilot-maintainer:面向维护者的开发技能包(SKILL.md +
  references + scripts),已通过 .dockerignore 排除出镜像
- docs/MCP.md:MCP 接入文档(27 工具清单、鉴权、客户端示例、安全建议)
- internal/utiles/dockercontext.go:Docker API 分级超时常量与辅助
- internal/utiles/network.go:sanitizeEndpointSettings,克隆/备份时清理
  运行期网络端点字段(NetworkID/IP/MAC 等)
- internal/utiles/backup_types.go:备份条目增加 stateKnown/wasRunning/
  wasPaused 状态字段,向后兼容旧格式
- 遗留测试入库:mcp / auth / servicecontext / network / restorecontainer /
  updateprogram / config2yaml / backup_types / backuppath / SSE 流 / login
- dockercopilot_test.go、.dockerignore(去除已删除的 static/)

注:internal/mcp 与 docs/MCP.md 内同时携带本次审查批的小幅修改,
详见下一个提交的清单。
一、闭环缺口修复
- 自更新链:UpdateProgram 加互斥锁(并发触发返回明确错误);
  start.sh 换入新版前保留 dockerCopilot.bak,新版启动后 30 秒内退出
  且连续 3 次自动回退上一版(信号转发改为 trap+wait,保留 PID1 语义);
  PUT /api/program 成功路径补审计与 webhook 通知(与 MCP 通道对齐)
- FNOS 版本检查假闭环:GetRemoteVersion 返回 ErrFnosManagedUpdate 哨兵,
  /api/version?type=remote 与 dc_check_program_update 显式返回 fnos=true
  与提示,不再伪装"无更新"
- 新增批量镜像清理:DELETE /api/images?filter=untagged|unused 与 MCP
  dc_clean_images(纯函数 PickImagesForCleanup + 单测;单个失败不影响
  其余,返回 removed/failed 明细并写审计)

二、健壮性修复
- 备份:单容器 inspect 失败不再中止整体备份(failures 清单返回);
  文件名带时间戳,同日多次备份互不覆盖;新增 BACKUP_KEEP(默认 7)
  自动清理旧备份,JSON/compose 共用
- MCP dc_update_container 的 image 参数改 optional(留空用容器当前镜像)
- GET / 改 json.Marshal 生成且不再暴露 backupDir(修复 BACKUP_DIR 含
  引号时健康检查 JSON 非法)
- 全局 Timeout 1e14ms→600000ms;SSE 路由拆分并加 rest.WithSSE();
  SSE 单连接 30 分钟自限(客户端自动重连)
- go/types.Nil 误用 → internal/types.Nil 占位类型;routes.go/types.go
  头注释改为"含手工扩展清单";删除 static/ 死资源

三、E2E 实测发现(dind 隔离环境真实 HTTP 往返暴露)
- VersionLogic 业务码 50001 被当作 HTTP 状态码写入,net/http 对 >999
  丢弃响应体 → 错误时返回空 500;改为 500(业务码不能超过 999)
- 拉取镜像阶段取消时误报"拉取镜像失败",改为"任务已取消"(ImagePull
  与 decodePullResp 两处分支均处理)

四、日志全量中文化(40+ 条)
- 上游遗留英文日志:image name/need update/not need update/localDigest/
  Failed to connect/Starting server/备份写入 Error.../panic 兜底等
- 英文错误字符串:unsupported challenge type/no credentials available/
  registry responded to head request 等
- 保留英文:go-zero 框架访问日志、Go 标准库错误原文、镜像名/digest 等
  数据值

五、文档同步
- README:功能清单落地(5/6 批量清理)、/api/auth 表单格式说明、
  BACKUP_KEEP、已知限制(私有镜像无法检查更新/FnOS 更新语义/自更新
  回滚边界)、icons API 补文档
- docs/MCP.md:dc_clean_images、image 可选、autoupdate 前置条件、
  工具数 27;docs/ROADMAP.md:REGISTRY_INSECURE 默认值对齐、Timeout 缺陷
  标注已修;skills/ 维护文档同步

验证:go build/vet/test 全绿(11 个包);NAS dind 隔离环境全链路 E2E
(更新链/SSE/取消/备份保留/恢复 force/镜像清理/start.sh 回退/MCP 27 工具/
远程版本检查)。

另:本提交同时携带此前工作区已有的零散修改一并入库(CI workflows、
docker/Dockerfile、go.mod/go.sum、dockercopilot.api、icons 上传加固等)。
@DongShull DongShull closed this Oct 31, 2026
@DongShull
DongShull deleted the fix/audit-20261031 branch October 31, 2026 15:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant