You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker化GitLab服务跨Linux主机迁移失败的问题排查与解决

GitLab迁移后“Upgrade failed”问题排查与解决

一、错误原因分析

“Upgrade failed”错误不是因为无法复制.s.PGSQL.5432文件导致的:

  • .s.PGSQL.5432是PostgreSQL运行时生成的Unix域套接字,属于临时进程通信文件,GitLab停止服务后该文件就失去作用,完全不需要迁移。
  • 真正的PostgreSQL核心数据存储在data/postgresql/data/目录下,只要这个目录完整迁移,数据库数据就不会丢失。
  • 本次错误的核心原因是GitLab启动时执行遗留存储未迁移数据检查失败,触发了容器重启保护机制。

二、快速恢复方案(临时跳过检查)

根据日志提示,添加环境变量跳过检查即可恢复服务:

  1. 修改docker-compose.yml,在environment区块中新增环境变量:
    version: '3.6'
    services:
      web:
        image: 'gitlab/gitlab-ce:15.11.5-ce.0'
        restart: always
        hostname: 'gitlab.mydomain.com'
        environment:
          GITLAB_OMNIBUS_CONFIG: |
            nginx['listen_https'] = false
            gitlab_ci['gitlab_ci_all_broken_builds'] = true
            gitlab_rails['gitlab_shell_ssh_port'] = 10067
            ...
          # 新增以下行
          GITLAB_SKIP_UNMIGRATED_DATA_CHECK: "true"
        ports:
          - '80:80'
          - '10067:22'
        volumes:
          - './config:/etc/gitlab'
          - './logs:/var/log/gitlab'
          - './data:/var/opt/gitlab'
        shm_size: '512m'
    
  2. 重启GitLab服务:
    docker-compose down && docker-compose up -d
    

三、彻底解决方案(修复存储检查问题)

如果需要长期稳定运行,建议修复存储迁移问题:

  1. 先按上面的方法启动服务,确保容器正常运行。
  2. 进入GitLab容器:
    docker exec -it <gitlab_container_name> bash
    
  3. 执行存储迁移与检查命令:
    # 迁移到哈希存储(GitLab推荐的存储格式)
    gitlab-rake gitlab:storage:migrate_to_hashed
    # 检查存储状态
    gitlab-rake gitlab:storage:check
    
  4. 确认检查无错误后,移除docker-compose.yml中的GITLAB_SKIP_UNMIGRATED_DATA_CHECK环境变量,重新启动服务。

四、迁移打包优化建议

下次迁移时,建议使用tar工具打包(更适配Unix文件系统),或者排除无用的临时文件:

  • 使用tar打包:
    tar -czf mygitlab.tar.gz mygitlab/
    
  • 使用zip打包时排除套接字/临时文件:
    zip -r mygitlab.zip mygitlab/ -x "*/.s.PGSQL.*" "*/tmp/*" "*/socket/*"
    

内容的提问来源于stack exchange,提问作者Brian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 03:26:15