Docker化GitLab服务跨Linux主机迁移失败的问题排查与解决
GitLab迁移后“Upgrade failed”问题排查与解决
一、错误原因分析
“Upgrade failed”错误不是因为无法复制.s.PGSQL.5432文件导致的:
.s.PGSQL.5432是PostgreSQL运行时生成的Unix域套接字,属于临时进程通信文件,GitLab停止服务后该文件就失去作用,完全不需要迁移。- 真正的PostgreSQL核心数据存储在
data/postgresql/data/目录下,只要这个目录完整迁移,数据库数据就不会丢失。 - 本次错误的核心原因是GitLab启动时执行遗留存储未迁移数据检查失败,触发了容器重启保护机制。
二、快速恢复方案(临时跳过检查)
根据日志提示,添加环境变量跳过检查即可恢复服务:
- 修改
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' - 重启GitLab服务:
docker-compose down && docker-compose up -d
三、彻底解决方案(修复存储检查问题)
如果需要长期稳定运行,建议修复存储迁移问题:
- 先按上面的方法启动服务,确保容器正常运行。
- 进入GitLab容器:
docker exec -it <gitlab_container_name> bash - 执行存储迁移与检查命令:
# 迁移到哈希存储(GitLab推荐的存储格式) gitlab-rake gitlab:storage:migrate_to_hashed # 检查存储状态 gitlab-rake gitlab:storage:check - 确认检查无错误后,移除
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
相关产品推荐
相关产品推荐

