Docker Compose部署的Gitlab突然提示无仓库但数据存在是什么原因
GitLab @hashed存储模式下仓库源码无法访问故障原因
- 存储路径映射或权限异常
- 首先确认
docker-compose.yml中/var/opt/gitlab/git-data的宿主机挂载路径是否和实际存放@hashed目录的路径一致,若部署后修改过挂载配置、或宿主机磁盘挂载点漂移,会导致GitLab进程无法读取实际仓库存储文件。CI/CD、容器镜像仓库因为存储路径独立(默认分别对应/var/opt/gitlab/gitlab-ci、/var/opt/gitlab/registry),所以不受影响。 - 检查@hashed目录及其子文件的所属用户组是否为
git:git,如果手动操作过宿主机存储文件、或磁盘权限被意外重置,会导致GitLab运行进程无权限读取仓库裸库文件,前台就会显示无仓库提示。
- 首先确认
- @hashed哈希映射关系损坏
GitLab的@hashed存储是通过项目ID做哈希计算得到的存储路径,映射关系存储在PostgreSQL数据库projects表的repository_storage_path字段中。如果数据库发生过意外写入、或项目迁移/重命名操作异常,会导致数据库记录的路径和实际@hashed下的物理路径不匹配,无法定位到仓库文件。可以进入GitLab容器执行gitlab-rake gitlab:storage:list_hashed_projects核对哈希路径和项目的映射是否正常。 - Gitaly服务异常
GitLab的仓库读写完全依赖Gitaly服务,若Gitaly配置文件/var/opt/gitlab/gitaly/config.toml里的存储路径配置和实际挂载路径不一致、或Gitaly进程意外崩溃没有正常重启,会导致无法读取仓库文件,而CI/CD、镜像仓库不依赖Gitaly服务所以可以正常访问。进入容器执行gitlab-ctl status gitaly可确认服务运行状态,执行gitlab-ctl tail gitaly查看报错日志可快速定位问题。 - 存储版本不兼容
如果近期执行过GitLab跨大版本升级,旧版本的仓库存储格式和新版本@hashed存储的读取逻辑不兼容,会导致现有仓库无法被识别,gitlab reconfigure命令不会自动修复存储格式兼容问题,需要手动执行存储迁移任务。
内容的提问来源于stack exchange,提问作者osama
相关产品推荐
相关产品推荐

