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

从旧安装文件恢复GitLab-CE遇PostgreSQL区域兼容问题求助

解决方案

方法一:修复容器内区域支持

  • 启动GitLab容器时强制指定区域环境变量,并确保容器内安装对应区域包:
    1. 先停止当前容器:docker stop <你的GitLab容器名>
    2. 重新启动容器,添加区域参数:
      docker run -d \
        --name gitlab \
        --env LANG=en_US.UTF-8 \
        --env LC_ALL=en_US.UTF-8 \
        -v /home/gitlab/logs:/var/log/gitlab \
        -v /home/gitlab/data:/var/opt/gitlab \
        -v /home/gitlab/config:/etc/gitlab \
        gitlab/gitlab-ce:12.4.0-ce.0
      
    3. 进入容器安装区域包:
      docker exec -it gitlab bash
      apt-get update && apt-get install -y locales
      locale-gen en_US.UTF-8
      
    4. 重启容器:docker restart gitlab

方法二:修正PostgreSQL区域配置

操作前务必备份/home/gitlab/data目录,避免数据丢失:cp -r /home/gitlab/data /home/gitlab/data_backup

  • 停止容器:docker stop gitlab
  • 进入PostgreSQL配置目录:cd /home/gitlab/data/postgresql/11/main(11是GitLab 12.4对应的PostgreSQL版本)
  • 修改postgresql.conf,将lc_collate和lc_ctype的值改为容器内可用的区域(先通过docker exec -it gitlab locale -a查看,通常是en_US.utf8)
  • 启动容器:docker start gitlab

方法三:使用官方备份恢复流程

  • 从旧数据的/home/gitlab/data/backups目录查找是否有.tar格式的官方备份文件
  • 若存在备份文件,按以下步骤恢复:
    1. 启动干净的同版本GitLab容器
    2. 将备份文件复制到容器内:docker cp <备份文件路径> gitlab:/var/opt/gitlab/backups/
    3. 设置文件权限:docker exec -it gitlab chown git:git /var/opt/gitlab/backups/<备份文件名>.tar
    4. 停止相关服务:docker exec -it gitlab gitlab-ctl stop puma && gitlab-ctl stop sidekiq
    5. 执行恢复命令(替换<备份文件名前缀>为.tar前的部分):
      docker exec -it gitlab gitlab-backup restore BACKUP=<备份文件名前缀>
      
    6. 复制旧配置文件到挂载目录:将旧的gitlab.rb和gitlab-secrets.json复制到/home/gitlab/config/
    7. 重新配置并重启:
      docker exec -it gitlab gitlab-ctl reconfigure
      docker exec -it gitlab gitlab-ctl restart
      

方法四:手动提取仓库与用户数据

恢复仓库文件

  • 直接复制旧仓库目录到新挂载路径:cp -r /旧数据路径/var/opt/gitlab/git-data/repositories/* /home/gitlab/data/git-data/repositories/
  • 设置权限:chown -R git:git /home/gitlab/data/git-data/repositories/

恢复用户数据库

  1. 临时启动兼容旧区域的PostgreSQL容器,挂载旧PostgreSQL数据目录导出数据库:
    docker run -d \
      --name pg-temp \
      --env LANG=en_US.UTF-8 \
      -v /旧数据路径/var/opt/gitlab/postgresql/11/main:/var/lib/postgresql/11/main \
      postgres:11
    docker exec -it pg-temp pg_dump -U gitlabhq_production gitlabhq_production > gitlab_db.sql
    docker stop pg-temp && docker rm pg-temp
    
  2. 在新GitLab容器内导入数据库:
    docker exec -i gitlab psql -U gitlabhq_production gitlabhq_production < gitlab_db.sql
    docker exec -it gitlab gitlab-ctl reconfigure
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 00:15:41