当前位置: 首页 > news >正文

gitlab-jh的docker容器自动退出/gitlab镜像版本/升级问题

背景

上个月用docker部署了一个gitlab-jh的服务,给小组上传代码使用,这个月由于机器故障重装系统,当我重新部署好gitlab后发现docker容器启动后会闪退,为寻因果,故作此篇

  • docker-compose.yml 文件
version: '3.6'
services:web:image: 'registry.gitlab.cn/omnibus/gitlab-jh:latest'#容器退出后会自动重启restart: alwayshostname: 'gitlab.example.com'environment:GITLAB_OMNIBUS_CONFIG: |external_url 'http://10.20.18.181:8929' gitlab_rails['gitlab_shell_ssh_port'] = 2224ports:# 宿主机与容器内端口映射- '8929:8929'- '2224:22'volumes:- '$GITLAB_HOME/config:/etc/gitlab'- '$GITLAB_HOME/logs:/var/log/gitlab'- '$GITLAB_HOME/data:/var/opt/gitlab'shm_size: '256m'
  • install_gitlab.sh 脚本
#! /bin/bash
export GITLAB_HOME=/archive/.gitlab
docker compose up -d

原因分析

  • 启动容器后,容器闪退
# ./install_gitlab.sh
[+] Running 1/1✔ Container gitlab-web-1  Started                                                       0.5s 
# docker ps
CONTAINER ID   IMAGE                                         COMMAND             CREATED      STATUS                            PORTSNAMES
e307aa90d5dd   registry.gitlab.cn/omnibus/gitlab-jh:latest   "/assets/wrapper"   3 seconds ago   Up 2 seconds (health: starting)   80/tcp, 443/tcp, 0.0.0.0:8929->8929/tcp, :::8929->8929/tcp, 0.0.0.0:2224->22/tcp, :::2224->22/tcp   gitlab-web-1
# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
  • 查看日志
    日志显示目前gitlab-jh版本是17.0.1,最后一行又显示我正从16.10.3升级到17.0.1
# docker logs e30
Thank you for using GitLab Docker Image!
Current version: gitlab-jh=17.0.1-jh.0Configure GitLab for your system by editing /etc/gitlab/gitlab.rb file
And restart this container to reload settings.
To do it use docker exec:docker exec -it gitlab editor /etc/gitlab/gitlab.rbdocker restart gitlabFor a comprehensive list of configuration options please see the Omnibus GitLab readme        
https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/README.mdIf this container fails to start due to permission problems try to fix it by executing:       docker exec -it gitlab update-permissionsdocker restart gitlabCleaning stale PIDs & sockets
It seems you are upgrading from 16.10.3-jh to 17.0.1.
It is required to upgrade to the latest 16.11.x version first before proceeding.
Please follow the upgrade documentation at https://docs.gitlab.com/ee/update/index.html#upgrading-to-a-new-major-version
  • 在其他目录重新部署gitlab,发现服务正常运行,初步判断是宿主机映射目录的问题
# ls
config  data  logs
  • 对目录分析,最终查看到是data中版本与镜像版本不匹配
    data目录中子目录对应的版本号都是16.x
# find . -name "*VERSION*"
./gitaly/VERSION
./gitlab-workhorse/VERSION
./gitlab-kas/VERSION
./postgresql/data/PG_VERSION
./postgresql/data/base/12974/PG_VERSION
./postgresql/data/base/16386/PG_VERSION
./postgresql/data/base/1/PG_VERSION
./postgresql/data/base/12973/PG_VERSION
./postgresql/VERSION
./nginx/VERSION
./gitlab-exporter/RUBY_VERSION
./gitlab-rails/RUBY_VERSION
./gitlab-rails/VERSION# cat gitlab-workhorse/VERSION
gitlab-workhorse (v16.10.3-jh)-(20240417.013513)a# cat gitlab-rails/VERSION
16.10.3-jh# cat gitlab-kas/VERSION
kas version v16.10.1, commit: 8892127a, built: 20240417.013045

原因总结

日志显示目前gitlab-jh版本是17.0.1,最后一行又显示我正从16.10.3升级到17.0.1
data目录中子目录对应的版本号都是16.x
镜像设置为latest,故每次部署时,默认拉最新镜像,但是我的data数据是旧版本的数据
根据背景、日志以及data目录中的版本号可以判定是数据的版本和镜像的版本不匹配导致

解决方案

重新将镜像的版本恢复到16.10.3,修改docker-compose.yml 文件的image字段,将镜像tag从latest改为16.10.3,后续再正常升级即可

# cat docker-compose.yml 
version: '3.6'
services:web:#image: 'registry.gitlab.cn/omnibus/gitlab-jh:latest'image: 'registry.gitlab.cn/omnibus/gitlab-jh:16.10.3'restart: alwayshostname: 'gitlab.example.com'environment:GITLAB_OMNIBUS_CONFIG: |# 容器内端口改为8929external_url 'http://10.20.18.181:8929'# (可能也可不配置?)增加gitlab shell端口号,22和2224都可以使用 gitlab_rails['gitlab_shell_ssh_port'] = 2224ports:# 宿主机与容器内端口映射- '8929:8929'- '2224:22'volumes:- '$GITLAB_HOME/config:/etc/gitlab'- '$GITLAB_HOME/logs:/var/log/gitlab'- '$GITLAB_HOME/data:/var/opt/gitlab'shm_size: '256m'

参考

  1. 极狐GitLab Docker 镜像
  2. 使用 Docker compose 升级极狐GitLab

相关文章:

  • 安卓手机APP开发_____通过设备管理政策增强安全性
  • python中的预编译正则表达式
  • 03--nginx架构实战
  • Matlab解决矩阵微分方程建模(代码开源)
  • elasticsearch安装与使用(2)-基于term匹配的简单搜索引擎搭建
  • debian常用命令
  • 一键开启:盲盒小程序里的梦幻奇遇
  • The 18th Northeast Collegiate Programming Contest(5/9/13)
  • 【ARM Cache 及 MMU 系列文章 6 -- Cache 寄存器 CTR | CLIDR | CCSIDR | CSSELR 使用详解 1】
  • 记忆化搜索汇总
  • JS逆向-B站评论数据w_rid参数和wts参数
  • 人机交互中的阴差阳错
  • pytorch数学操作
  • 嵌入式软件跳槽求指导?
  • 学习数据分析思维的共鸣
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • 【刷算法】从上往下打印二叉树
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • android图片蒙层
  • CentOS7简单部署NFS
  • MobX
  • PHP CLI应用的调试原理
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 爱情 北京女病人
  • 编写高质量JavaScript代码之并发
  • 分布式事物理论与实践
  • 记录:CentOS7.2配置LNMP环境记录
  • 技术发展面试
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 时间复杂度与空间复杂度分析
  • 运行时添加log4j2的appender
  • 智能网联汽车信息安全
  • 阿里云服务器购买完整流程
  • ​2020 年大前端技术趋势解读
  • ​插件化DPI在商用WIFI中的价值
  • (python)数据结构---字典
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (四)模仿学习-完成后台管理页面查询
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • (转)原始图像数据和PDF中的图像数据
  • (转载)Google Chrome调试JS
  • *2 echo、printf、mkdir命令的应用
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .NET Micro Framework 4.2 beta 源码探析
  • .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换
  • .NET中使用Redis (二)
  • .Net转前端开发-启航篇,如何定制博客园主题
  • @DataRedisTest测试redis从未如此丝滑
  • @RestControllerAdvice异常统一处理类失效原因
  • [ vulhub漏洞复现篇 ] JBOSS AS 4.x以下反序列化远程代码执行漏洞CVE-2017-7504
  • [ 英语 ] 马斯克抱水槽“入主”推特总部中那句 Let that sink in 到底是什么梗?