近日,多名GitLab用户反映,在访问GitLab Container Registry(容器注册表)时,发现镜像的“Image Size”(镜像大小)一栏无法正常显示,仅呈现空白或“-”符号。这一问题自2025年3月下旬起陆续被报告,并在GitLab官方社区论坛及GitHub Issue页面引发热议。因镜像大小信息对容器管理、存储规划及CI/CD流水线优化至关重要,该故障已对部分开发团队的日常工作造成实质性影响。

问题表现:列表页与详情页均受影响

据用户反馈,问题主要集中在GitLab 16.x及17.x版本的自托管实例(Self-Managed)以及SaaS版(GitLab.com)的部分项目中。在Container Registry的镜像列表页面,原本应显示每层镜像压缩后大小的列,如今大多为空值。部分用户尝试点击单个镜像标签查看详情,发现“Size”字段同样缺失。此外,通过GitLab API查询镜像元数据时,sizetotal_size字段返回的数据也时常为零或空值。

“我们依赖镜像大小来评估存储成本,并判断是否需要清理旧版本。现在这个字段空白,我们只能手动计算或者在CI中另写脚本获取,非常低效。”一位来自中大型企业的DevOps工程师在社区帖中写道。另一位独立开发者则表示,该问题导致他无法通过GitLab UI直接比较不同分支构建的镜像体积,迫使他转向命令行工具docker images

可能原因:GitLab版本升级与数据库迁移遗留

经初步分析,该问题并非所有用户都会遇到。自托管实例中,部分用户报告问题始于从GitLab 15.x升级到16.x之后;而GitLab.com用户则发现,它在某些项目组中“时有时无”。技术社区推测,故障可能与GitLab后端数据库中对容器镜像元数据的存储方式有关。

GitLab在15.11版本中引入了新的容器注册表数据库架构(基于PostgreSQL),用于替代原有的文件系统元数据存储。新架构旨在提升查询性能,支持更复杂的过滤和排序。然而,在数据迁移过程中,部分旧的镜像层信息未能正确映射至新表,导致size字段丢失。此外,GitLab Container Registry内部使用了一个名为“manifest”的JSON对象来记录镜像层大小,如果该对象未被正确解析或缓存过期,UI端就无法渲染出数值。

另有观点认为,GitLab 16.x中引入了新的“容器注册表UI组件”,该组件可能在特定浏览器或网络环境下无法加载正确的API响应。Chrome和Firefox用户均报告了相同现象,因此浏览器兼容性可能性较低。

官方态度:已确认存在,修复进行中

截至本文发稿时,GitLab官方已在GitLab.com公共状态页面(Status Page)上标记该问题为“已确认”,并分配了高优先级。官方工程师在相关Issue #429071中回应称:“我们正在调查容器注册表API返回size字段为空的情况,初步定位到是数据库查询时未正确关联blob表。预计在下一个补丁版本(17.2.3或17.3)中修复。”

GitLab还建议受影响的用户尝试以下临时方案: - 使用curldocker manifest inspect命令手动获取镜像大小。 - 对于自托管用户,可检查/var/log/gitlab/registry/下的日志,确认是否有数据库连接异常。 - 清理浏览器缓存或使用无痕模式刷新页面,查看是否为前端缓存问题。

不过,官方也坦承,对于历史遗留镜像,修复后可能仍无法自动回填大小数据,需要用户通过API重新推送更新镜像元数据。

行业影响与用户建议

容器镜像大小信息是DevOps实践中不可或缺的一环。一方面,它帮助团队监控镜像膨胀趋势,防止“胖镜像”拖慢CI/CD流程;另一方面,在私有部署场景下,镜像大小直接关联对象存储成本(如S3、MinIO)。当前故障虽不直接影响镜像拉取与推送功能,但削弱了GitLab在容器管理方面的可用性。

有分析人士指出,GitLab近年频繁重构其容器注册表模块,试图与Docker Hub、Harbor等专业注册表竞争,但稳定性仍待加强。此次“镜像大小不显示”事件,暴露出在大型数据库迁移中,元数据完整性的校验机制尚不够完善。

对于受影响的用户,建议在正式修复发布前,采用以下几种方式应急: 1. 使用API脚本批量获取:通过curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/<project_id>/registry/repositories/<repo_id>/tags" 解析响应中的total_size字段(如果API未返回,需检查权限)。 2. 集成第三方监控:例如用Prometheus定期抓取容器注册表指标,推送到Grafana面板。 3. 回滚至稳定版本:自托管用户可暂缓升级至16.x后期版本,直到官方发布修复。

结语

GitLab作为全球广泛使用的DevOps平台,任何UI功能异常都可能牵扯大量开发者的工作流。本次“Container Registry Image Size not shown”事件,虽非严重业务阻断,却提醒了平台开发者与运维团队:在追求功能迭代的同时,需要为数据迁移和界面重构保留充足的灰度测试周期。预计GitLab将在未来两周内发布修复更新,我们也将持续跟踪事态进展。