Skip to content

v1.0.3 - #6

Merged
l429609201 merged 34 commits into
mainfrom
test
Aug 28, 2026
Merged

l429609201 merged 34 commits into
mainfrom
test

Conversation

@l429609201

Copy link
Copy Markdown
Owner

No description provided.

feat(container): 添加 Docker API 版本感知的容器配置清理功能

- 修改 SanitizeCreateConfig 函数签名,增加 apiVersion 参数用于版本感知清理
- 新增 DockerManager.APIVersion 方法获取协商后的 API 版本信息
- 实现对低版本 daemon (API < 1.44) 的 per-network MacAddress 字段自动清理
- 修复在群晖 DSM 等非标准环境中容器重建失败的问题
- 添加完整的集成测试验证不同 API 版本环境下的配置处理逻辑
- 更新所有调用点以传递正确的 API 版本信息
```
feat(container): 优化镜像名称处理逻辑,修复更新后显示SHA256的问题

当同一镜像部署多个容器时,第一个容器更新后会拉取新镜像并重新打tag,
导致其他容器仍在使用的旧镜像变成untagged状态,此时v.Image会变成空字符串。
现在优先使用containerInspect.Config.Image(创建时的镜像名)作为CreateImage,
该字段不会受后续tag变化影响,保持用户友好的镜像名称显示。

同时移除DelOldContainer环境变量控制,改为默认删除旧容器。

fix(bot): 修复面板中镜像名称显示问题,优先使用CreateImage字段

refactor(containerops): 统一镜像更新逻辑,使用CreateImage替代Image字段

docs(version): 更新版本号至v1.0.3
```
feat(bot): 优先使用CreateImage字段避免镜像更新问题

当容器的Image字段在更新后可能变为空或SHA256值时,
优先使用CreateImage字段来获取正确的镜像信息,
并在CreateImage为空时降级使用Image字段作为备选方案。

这修复了在镜像更新后通知中显示错误镜像名称的问题。
```
feat(bot): 添加屏蔽容器更新通知功能

- 新增 NotifyUpdateWithMutedInfo 方法,支持推送已屏蔽但有更新的容器通知
- 修改 NotifyUpdateWithKeyboard 注释,明确为推送未屏蔽容器的更新通知
- 扩展更新通知键盘,添加"查看被屏蔽的"按钮和回调处理
- 实现 UpdateNotifierWithMuted 接口,区分未屏蔽和已屏蔽的更新容器
- 重构更新通知逻辑,支持在摘要中显示屏蔽容器数量并提供单独查看入口
- 修改分页详情功能,支持切换显示已屏蔽或未屏蔽的容器列表
```
feat(compose): 添加 Docker CLI 支持并优化操作按钮国际化

- 在 Dockerfile 中安装 docker-cli 和 docker-cli-compose 插件以支持
  docker compose 命令执行
- 将前端界面的操作按钮标题从英文改为中文(启动、停止、重启、拉取)
- 增强错误处理逻辑,当 Docker 命令未找到时提供更清晰的错误提示和解决
  方案说明
```
feat(compose): 实现 Docker Compose 操作实时日志推送功能

- 修改 ContainerEditModal 组件中的挂载点选择器,更新宿主机路径输入框占位符文本,
  并调整文件浏览器按钮的标题提示,明确区分宿主机和容器内目录浏览功能
- 更新 ContainerPathPicker 和 DirectoryPicker 组件的标题,增加关于 DockerCopilot
  容器内目录的说明文字,并在 DirectoryPicker 中添加警告提示,告知用户显示的是
  DockerCopilot 容器内的目录而非宿主机真实路径
- 在 internal/logic/compose/actionlogic.go 中修改 ComposeLogic.Action 方法,
  将原有的 RunAction 调用替换为支持进度更新的 RunActionWithProgress 方法,
  实现实时推送日志到前端的功能
- 在 internal/module/compose/runner.go 中新增 RunActionWithProgress 函数,
  该函数通过管道方式捕获命令输出,实现流式读取并实时更新任务进度,
  支持同时处理标准输出和错误输出,包含详细的错误处理和超时控制逻辑
```
fix(DirectoryPicker): 移除多余的h3标签闭合

移除了DirectoryPicker组件中多余的</h3>标签闭合,
修复了HTML结构问题
```
feat(container): 添加删除旧容器选项支持

允许前端控制是否在更新时删除旧容器,默认保持删除行为。

BREAKING CHANGE: 更新请求现在接受 delOldContainer 参数来控制
旧容器的删除行为。
```
feat(compose): 添加文件管理器功能支持创建文件夹和Compose配置文件

- 前端添加ComposeFileManager组件,支持浏览/compose目录、创建文件夹和docker-compose.yml文件
- 新增createFolder和createFile API方法用于后端接口调用
- 后端添加CreateFolderHandler、CreateComposeFileHandler、ReadFileHandler和SaveFileHandler接口
- 实现文件浏览功能,支持显示目录和文件列表
- 添加文件内容编辑、校验和保存功能
- 改进Browse接口同时返回目录和文件列表
```
refactor(compose): 重命名文件操作相关函数以提高语义清晰度

- 将 ReadFileHandler 重命名为 ReadFileByPathHandler,并更新注释说明其用途
- 将 SaveFileHandler 重命名为 SaveFileByPathHandler,并更新注释说明其用途
- 将逻辑层的 ReadFile 方法重命名为 ReadFileByPath,明确表示按路径读取文件
- 将逻辑层的 SaveFile 方法重命名为 SaveFileByPath,明确表示按路径保存文件
- 更新路由注册中的处理器引用,指向新的函数名
```
feat(Compose): 添加项目搜索功能

- 引入Search图标组件和useMemo Hook
- 添加searchQuery状态管理搜索关键词
- 实现基于项目名称、路径和配置文件的过滤逻辑
- 在页面头部添加搜索输入框,支持实时过滤
- 增加清除搜索按钮和无匹配结果提示
- 使用filteredProjects替代原始projects数组渲染列表
```
feat(helper): 增强自我更新功能的稳定性和自清理机制

- 添加容器启动后稳定性验证:启动成功后等待2秒检查容器是否正常运行,
  防止启动后立即崩溃的情况,并在检测到崩溃时自动回滚到旧容器

- 实现详细的启动失败诊断:获取并记录新容器的启动日志(前50行),
  便于排查启动失败的具体原因

- 添加helper容器自清理功能:更新成功后主动删除自身容器,
  避免遗留临时容器占用系统资源

- 改进Docker API兼容性:在sanitizecontainerconfig中清理网络端点配置
  的运行态字段(EndpointID、Gateway、IPAddress等),解决非标准Docker
  daemon(如群晖)的网络冲突问题

- 调整helper容器生命周期管理:将AutoRemove设置为false,失败时保
  留容器日志供排查,成功时由helper自行清理,提高故障诊断能力

- 优化start.sh脚本:添加默认工作目录设置,增强脚本健壮性
```
feat(frontend): 优化PWA配置和移动端体验

- 移除重复的苹果移动图标meta标签,保留标准PWA配置
- 更新应用描述为"Docker容器管理平台 - 一键更新、定时任务、Compose编排"
- 将短名称改为"DockerCP"以提高显示效果
- 添加快捷方式支持,包括容器列表和任务中心
- 为图片添加懒加载属性以提升性能
- 实现任务面板右滑关闭手势,优化移动端操作体验
- 添加顶部安全区域适配,避免刘海屏和状态栏遮挡内容
```
feat(Containers): 优化容器组件图标加载失败处理

当容器图标加载失败时,采用更优雅的降级方案:
- 添加错误处理注释说明用户体验优化策略
- 使用createElement方式创建备用图标元素,避免innerHTML的安全问题
- 改进DOM操作逻辑,确保备用图标正确显示
- 为图片添加loading="lazy"属性提升性能
- 在容器详情模态框中同步修复图标错误处理逻辑
```
feat(api): 添加图标管理API接口并集成多个应用logo资源

添加完整的图标管理API功能,包括:
- 获取所有图标配置
- 上传图标文件支持
- 通过URL绑定图标
- 自动抓取站点favicon功能

同时集成40+个常用应用的logo资源文件,为前端界面提供丰富的图标支持
```
feat(containers): 添加容器操作日志和执行终端功能

- 修改onOps回调以支持不同的操作类型
- 为日志选项卡设置专门的日志目标容器
- 为执行选项卡设置专门的控制台目标容器

refactor(imageLogos): 将镜像logo获取改为同步函数

- 移除getImageLogo函数的异步特性
- 使用已加载的缓存数据而非等待后端加载
- 简化hasBuiltInLogo函数为同步调用
- 避免异步问题并提升性能
```
feat(icons): 支持容器名称匹配和扩展图标配置格式

- 修改前端图标配置结构,支持容器名和镜像名分别配置
- 新增图标配置数据结构,包含target、targetType、iconUrl和priority字段
- 后端API改为JSON格式存储,替换原有的JavaScript配置文件
- 支持容器级别和镜像级别的图标配置,容器级别优先级更高
- 前端getImageLogo函数增加containerName参数,优先匹配容器名称
- 更新所有相关API接口,包括上传、获取、设置图标等操作
- 添加SVG和ICO格式图片支持
- 调整图标匹配算法,支持精确匹配、大小写不敏感匹配和模糊匹配
```
feat(dockercopilot): 添加 favicon 支持和内置图标配置

- 添加 /favicon.png 和 /favicon.ico 路由处理,提供 DockerCopilot 自身的图标
- 实现 ensureBuiltInIcons 函数,确保 DockerCopilot 内置图标配置存在
- 在图标获取处理器中自动初始化内置图标配置
- 修复上传处理器中的路径拼接问题,使用 filepath.Join 替代硬编码路径
```
feat: 嵌入前端资源并优化 favicon 服务

- 引入 gorilla/mux 路由库和 pathvar 工具
- 将 favicon 服务从文件系统改为从嵌入的前端资源读取
- 更新 API 客户端中 fetchIcon 方法的参数结构
- 修改内置图标配置中的路径引用
```
refactor(dockercopilot): 移除未使用的依赖并更新嵌入资源路径

移除未使用的 github.com/gorilla/mux 和 github.com/zeromicro/go-zero/rest/pathvar 依赖包,
同时将嵌入的前端资源引用从 embeddedDist 更新为 embeddedFront,并修正 favicon 路径以匹配
实际的前端构建目录结构
```
feat(dockercopilot): 调整配置目录初始化逻辑

移除imageLogos.js默认配置文件创建功能,
改为仅创建config目录用于icons.json图标配置
```
feat(image-api): 添加targetType参数到fetchIcon接口调用

- 在persistIconToServer函数中为fetchIcon API调用添加targetType参数
- 增加详细的错误日志记录,包括image名称、容器URL和响应数据
- 添加调试信息输出以支持问题排查
- 改进错误处理机制,提供更丰富的调试信息
```
feat(useFavicon): 添加调试日志并优化容器过滤逻辑

在useFaviconMap钩子中添加了详细的调试日志,用于跟踪容器过滤过程,
包括总容器数、自定义图标数量等统计信息。重构了容器过滤条件,
将复杂的过滤逻辑拆分为清晰的变量判断,并为每个被跳过的容器
添加跳过原因的日志输出,便于调试favicon抓取问题。
```
refactor(docker-copilot): 统一路径常量管理和图标API优化

- 使用config常量统一管理数据目录路径(/data/config/image, /data/images, /data/config)
- 新增serveEmbeddedFavicon函数复用前端logo.png作为favicon资源
- 优化图标API参数结构,统一采用对象入参方式(imageName, url, targetType字段对齐)
- 删除重复的iconAPI,图标功能统一收敛至imageAPI模块
- 更新图标数据结构为IconItem数组格式,移除内置图标本地维护
- 优化getImageLogo函数为纯函数模式,消除异步加载时序问题
- 调整resolveContainerIcon优先级逻辑,确保持久化图标优于实时抓取结果
- 更新前端查询键名从'customIcons'调整为'icons'保持一致性
- 修复favicon路径处理逻辑,统一嵌入资源访问方式

fix(frontend): 图标管理和API调用优化

- 修复图标API调用参数结构不一致问题,统一使用对象入参格式
- 优化图标数据获取逻辑,前端不再维护内置图标列表
- 修复favicon获取和持久化流程,确保容器图标稳定性
- 更新图标过滤和搜索功能适配新的数据结构
```
feat(icon-cache): 解耦前端缓存与后端持久化机制

- 前端缓存命中时补充持久化写入,确保图标最终落库
- 缓存额外记录容器访问地址src字段,用于后端fetchIcon时的resolve操作
- 增加注释说明缓存与持久化的解耦逻辑和TTL处理机制

fix(icon-persistence): 添加互斥锁防止并发写入覆盖

- 在ensureBuiltInIcons和addOrUpdateIcon函数中添加iconsFileMu锁
- 避免批量自动抓取时多个请求同时读改写icons.json导致互相覆盖
- 保护icons.json的读改写操作,确保并发安全性
```
feat(container): 容器编辑弹窗挂载路径选择器优化

- 新增 pickContainerInitialPath 函数计算容器内路径选择器的起始目录,
  仅当挂载行已填的容器内路径 target 是有效的绝对目录路径时才作为起点,
  否则回退根目录 /,避免选择器因 target 为空、为文件或无效值时卡死

- 宿主机路径浏览按钮增加启用条件判断:仅本地容器且宿主机路径映射
  可用时方可使用,远程容器或映射未配置时禁用并显示相应提示

- 容器内路径选择器的 initialPath 参数改为调用 pickContainerInitialPath
  函数处理,确保起始路径有效性

- DirectoryPicker 组件 load 方法增加 allowFallback 参数,首次加载时
  若指定路径不可访问或列不出子目录,自动回退到根目录 /

fix(icon): 图标管理统一去除镜像tag避免匹配错位

- 前端 IconEditor 组件存储 key 统一去除 tag,与自动抓取路径
  (useFavicon)保持一致,避免同镜像因手动/自动存入带/不带 tag
  的两个 key 导致匹配错位

- 后端 obtainhandler.go 中 addOrUpdateIcon 函数对镜像级 key 统一
  去除 tag,与前端匹配逻辑对齐,防止再次写入带 tag 的 key

- 修复 useFaviconMap hook 中旧缓存无 src 字段时的补写逻辑,
  通过容器实时端口重建访问地址后再补写,避免容器永远无法落库

- 优化 getImageLogo 函数中的模糊匹配逻辑,支持 target 比镜像名
  更长/更完整的场景,提升图标匹配准确性
```
fix(DirectoryPicker): 修复目录浏览功能中子路径拼接逻辑错误

后端/compose/browse接口返回的dirs字段为目录名字符串数组而非对象,
需要根据当前目录路径拼接完整的子目录路径才能正确访问。
更新了组件逻辑以正确处理路径拼接,包括根目录和普通目录的场景。
```
feat(TaskPanel): 添加检查镜像更新任务的可更新列表展开功能

- 引入 ArrowUpCircle 图标用于可更新镜像标识
- 在 TaskRow 组件中添加 updatableImages 数据结构支持
- 实现可更新镜像列表的展开/折叠功能,与分层任务展开互斥
- 显示可更新镜像数量徽标(X 个镜像可更新)
- 展开后以列表形式展示镜像名:tag 详情
- 更新 useTasks hook 以接收后端传来的 updatableImages 数据

refactor(checkupdatelogic): 优化镜像更新检查结果处理逻辑

- 新增 collectUpdatableImages 方法收集可更新镜像清单
- 多主机同名同 tag 镜像自动去重处理
- 将可更新列表随任务完成状态一同下发给前端
- 更新完成消息显示已检测镜像总数和可更新数量
```
feat(image): 完善镜像更新检查逻辑,确保与容器列表角标统计口径一致

- 修改 collectUpdatableImages 方法,仅统计 InUsed=true 的镜像,
  与容器列表「有更新」角标保持同一口径
- 调整 GetAllImagesList 中的去重逻辑,记录镜像ID到下标的映射,
  确保 InUsed 状态正确合并(任一主机在用即为在用)
- 添加详细注释说明关键业务逻辑,避免将无容器使用的镜像计入可更新数量
```
@l429609201
l429609201 merged commit 43e2b91 into main Aug 28, 2026
4 checks passed
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