Docker环境下自托管GitLab-ce从12.10.3版本升级至14.1版本的分步升级流程咨询
Docker版GitLab-ce跨版本升级分步流程
我之前帮团队处理过好几次Docker部署的GitLab-ce跨版本升级,踩过不少坑,分享下我亲测有效的完整流程,能避开大部分升级陷阱:
一、升级前必做:全量备份(重中之重)
不管版本跨度多大,备份是底线,万一升级失败能快速回滚:
- 进入运行中的GitLab容器执行备份命令:
docker exec <你的容器名> gitlab-backup create - 备份完成后,把备份文件和核心配置文件拷到宿主机安全位置:
# 拷贝备份文件(文件名格式类似1699999999_2023_11_13_16.6.0_gitlab_backup.tar) docker cp <你的容器名>:/var/opt/gitlab/backups/<备份文件名> ./gitlab-backups/ # 拷贝关键配置文件,这俩丢了会导致数据无法恢复 docker cp <你的容器名>:/etc/gitlab/gitlab.rb ./gitlab-config/ docker cp <你的容器名>:/etc/gitlab/gitlab-secrets.json ./gitlab-config/ - 停止并删除旧容器(注意别删数据卷和旧镜像,留作回滚用):
docker stop <你的容器名> docker rm <你的容器名>
二、确定正确的升级路径(核心规则)
GitLab的升级有严格的版本依赖,绝对不能跨大版本直接跳级(比如从13.x直接升到16.x),必须遵循阶梯式升级路径:
升级节奏:当前大版本的最新补丁版 → 下一个大版本的首个稳定补丁版 → 该大版本的最新补丁版 → 重复直到目标版本
举个例子:如果当前是v13.10.3,升级路径应该是:v13.10.3 → v13.12.15(13.x最新补丁版) → v14.0.12(14.x首个稳定补丁版) → v14.10.5(14.x最新补丁版) → v15.0.5(15.x首个稳定补丁版) → v15.11.10(15.x最新补丁版) → v16.x.x(最新稳定版)
三、逐步执行升级操作
每次只升一个版本,确认没问题再走下一步:
- 拉取目标版本的GitLab-ce镜像:
docker pull gitlab/gitlab-ce:<目标版本号> - 用原数据卷和配置启动新容器(保证数据和配置继承):
docker run -d \ --name gitlab-temp \ --hostname <你的GitLab域名> \ -p 443:443 -p 80:80 -p 22:22 \ --restart always \ -v /srv/gitlab/config:/etc/gitlab \ -v /srv/gitlab/logs:/var/log/gitlab \ -v /srv/gitlab/data:/var/opt/gitlab \ gitlab/gitlab-ce:<目标版本号> - 等待容器完全初始化,实时查看日志直到出现
gitlab Reconfigured!提示:docker logs -f gitlab-temp - 登录GitLab检查核心功能(项目访问、用户登录、CI/CD配置等),确认正常后,停止并删除当前临时容器,继续下一个版本的升级。
- 重复上述1-4步骤,直到升到目标最新版本。
四、常见问题与注意事项
- 升级过程中如果遇到启动失败,优先看日志定位问题,常见原因是配置文件不兼容,可修改
gitlab.rb后执行docker exec <容器名> gitlab-ctl reconfigure重新配置。 - 确保服务器有足够磁盘空间,升级时会生成大量临时文件,磁盘不足会导致迁移失败。
- 大版本升级耗时较长,耐心等待,不要中途中断容器运行。
- 升级完成后,建议重新生成备份,覆盖之前的旧备份。
内容的提问来源于stack exchange,提问作者BTR Naidu




