从旧安装文件恢复GitLab-CE遇PostgreSQL区域兼容问题求助
解决方案
方法一:修复容器内区域支持
- 启动GitLab容器时强制指定区域环境变量,并确保容器内安装对应区域包:
- 先停止当前容器:
docker stop <你的GitLab容器名> - 重新启动容器,添加区域参数:
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 - 进入容器安装区域包:
docker exec -it gitlab bash apt-get update && apt-get install -y locales locale-gen en_US.UTF-8 - 重启容器:
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格式的官方备份文件 - 若存在备份文件,按以下步骤恢复:
- 启动干净的同版本GitLab容器
- 将备份文件复制到容器内:
docker cp <备份文件路径> gitlab:/var/opt/gitlab/backups/ - 设置文件权限:
docker exec -it gitlab chown git:git /var/opt/gitlab/backups/<备份文件名>.tar - 停止相关服务:
docker exec -it gitlab gitlab-ctl stop puma && gitlab-ctl stop sidekiq - 执行恢复命令(替换
<备份文件名前缀>为.tar前的部分):docker exec -it gitlab gitlab-backup restore BACKUP=<备份文件名前缀> - 复制旧配置文件到挂载目录:将旧的
gitlab.rb和gitlab-secrets.json复制到/home/gitlab/config/ - 重新配置并重启:
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/
恢复用户数据库
- 临时启动兼容旧区域的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 - 在新GitLab容器内导入数据库:
docker exec -i gitlab psql -U gitlabhq_production gitlabhq_production < gitlab_db.sql docker exec -it gitlab gitlab-ctl reconfigure
内容的提问来源于stack exchange,提问作者ponki
相关产品推荐
相关产品推荐

