服务顺序启动,解决 docker-compose 启动顺序 mysql启动慢导致服务失败

问题的产生

我使用docker-compose 编写了一个脚本,包括了mysqlredisspring boot server。但是由于mysql 数据量大了后启动会变慢,导致sprong boot server 启动失败

即使使用了 depends_on 这个配置也无效,因为这个配置只能保证容器的启动顺序,但是在mysql容器启动了但是服务还未启动,因此出现了这个问题。

解决问题

你赶时间的话请直接采用我的最终解,将你的 docker-compose,中的镜像命令修改一下

  • image:一个包含了监听其他端口脚本的镜像
  • entrypoint: 等待mysqlredis启动后 执行 -c 后的命令
my_server:
    image: sunbrightness/jdk-wait_run:8
    container_name: my_server
    ports:
      - 8080:8080
    environment:
      - LANG=C.UTF-8
      - TZ=Asia/Shanghai
    volumes:
      # 配置文件
      - ./server/:/home/java/
    privileged: true
    entrypoint: 'wait_run -d my_mysql:3306,my_redis:6379 -c "java -jar admin.jar"'
    restart: always
    depends_on:
      - km_mysql
      - km_redis

问题细节

编写一个sh 脚本

利用 linux 中的 netcat 工具监听端口,在端口启动后运行spring boot server

touch wait_run
chmod +x wait_run
vim wait_run
#!/bin/bash
#set -x

: ${SLEEP_SECOND:=2}

wait_for() {
    echo Waiting for $1 to listen on $2...
    while ! nc -z $1 $2; do echo waiting...; sleep $SLEEP_SECOND; done
}

declare DEPENDS
declare CMD

while getopts "d:c:" arg
do
    case $arg in
        d)
            DEPENDS=$OPTARG
            ;;
        c)
            CMD=$OPTARG
            ;;
        ?)
            echo "unkonw argument"
            exit 1
            ;;
    esac
done

for var in ${DEPENDS//,/ }
do
    host=${var%:*}
    port=${var#*:}
    wait_for $host $port
done

eval $CMD

这样你就可以通过如下命令,等待多个端口启动后再执行你的命令

/bin/bash wait_run -d 127.0.0.1:3306,127.0.0.1:6379 -c "java -jar admin.jar"

注意 jdk的docker容器不包含这个命令 nc

因此我们需要自定义一个Dockerfile 文件,让其安装好 netcat

# 基础镜像
FROM openjdk:8
# author
MAINTAINER sunbrightness

# 挂载目录
VOLUME /home/java
# 创建目录
RUN mkdir -p /home/java
# 指定路径
WORKDIR /home/java

# fix apt update error
RUN echo "deb https://mirrors.bfsu.edu.cn/debian/ bullseye main contrib non-free" > /etc/apt/sources.list
RUN apt-get update
# 安装netcat用于监听端口启动
RUN apt-get -y install netcat

# 将刚刚创建的nc命令移动到镜像中
COPY ./wait_run /bin
RUN chmod +x /bin/wait_run

这个便是我在最上文提到的sunbrightness/jdk-wait_run:8 镜像了。

花了好长时间才搞好的。也知道了java8的docker镜像是基于Debian 11 系统的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/7048.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

企业OA管理系统需具备哪些功能?

OA也就是办公自动化,是通过将计算机、通信等现代化技术运用到传统办公方式而形成的一种新型办公方式。OA办公管理系统能够更加高效优质的处理办公事务以及进行企业管理业务,实现对资源的高效利用,进而达到提高生产力,提升管理水平…

详解vue各种权限控制与管理的实现思路

一、 菜单权限 菜单权限:控制用户在系统中能够看到哪些菜单项菜单权限指的就是后台系统中的左侧的菜单栏,前端可以根据后端接口返回的权限数据结合element-ui菜单组件循环拼接而成即可,有什么权限就展示什么菜单通过vuex持久化插件(本地存储…

Linux系统【centos7】常用基础命令教程

今天我来介绍一下Linux系统的基础知识。 首先,我们需要了解Linux是什么。Linux是一种免费且开放源代码的操作系统,它被广泛用于服务器、移动设备和嵌入式系统。 接下来,我们需要了解基本的Linux命令。其中一些基本命令包括: 1.…

项目 TO 的自我修养

最近作为项目 TO 在公司内完成了一个涉及面比较广的项目,对于如何推动项目上线有一些经验和大家分享。希望刚毕业几年、没有参与过大型项目的同学,从中能学到一些方法,为今后担任项目主力做一些准备。所谓的 TO,是 Technical Owne…

java和mysql进行排序和排名

目录 一、基于java排序和排名 1、数值相同,排名相同,排名连续 2、数值相同,排名相同,排名不连续 3、数值相同,排名不相同,排名连续 二、基于mysql排序和排名 1、准备一张表 2、插入数据 3、设置临时变量,方便后续查询 4、数值相同,排名相同,排名连续 5、数值相同,排名…

天猫食品饮料数据分析:2月份茶饮料品牌销量TOP10排行榜!

近年来,茶饮料品类逐渐丰富,也在潜移默化中激发消费者的购物欲望,茶饮料行业的整体市场规模也不断增长。 根据鲸参谋电商数据显示,2023年2月份在天猫平台上,茶饮料相关产品的月销量将近149万件,环比增长约…

ADAS-GPS定位原理概述

前言 “GPS传感器在无人机、室外物流车以及诸多机器人应用中经常出现,它们机器人的定位、导航中发挥着重要的作用,而今天的L2~L5级别自动驾驶系统更是离不开它们,今天我们走进它们的世界,探索其背后原理以及本质。” …

MySQL之事务和锁机制

文章目录一、事务1.1 事务特征1.2 隔离级别1.3 开启事务二、锁机制2.1 读锁、写锁2.2 全局锁、表锁、行锁2.3 记录锁、间隙锁、临键锁提示:以下是本篇文章正文内容,MySQL 系列学习将会持续更新 一、事务 在数据库里面,我们希望有些操作能够以…

leaflet实现波动的marker效果(131)

第131个 点击查看专栏目录 本示例的目的是介绍如何在vue+leaflet中显示波动的marker效果。 直接复制下面的 vue+leaflet源代码,操作2分钟即可运行实现效果. 文章目录 示例效果配置方式示例源代码(共76行)安装插件相关API参考:专栏目标示例效果 配置方式 1)查看基础设置…

chatgpt 变现思路

教学 为用户提供ChatGPT的培训课程,教授如何使用和掌握ChatGPT的基本功能和高级技巧。课程可以通过在线平台或实体培训形式进行。 各种设计 ChatGPT可以为设计师提供创意灵感,包括平面设计、UI/UX设计、建筑设计等。此外,它还可以协助设计…

MySQL主从复制之多主多从部署流程—2023.04

文章目录一、多主多从实现架构图二、准备工作三、MySQL多主多从搭建流程1、修改2个主节点配置文件2、修改2个从节点配置文件3、2个主节点相互复制4、2个从节点分别复制主节点5、测试记录:一、多主多从实现架构图 这里是2主2从,下图基本例举出来的实现的…

电脑安装Ubuntu系统(非虚拟机)步骤简述

由于我的笔记本电脑比较古老(近10年),已经过了质保期,甚至续保时间都过了,所以本着能用则用的想法就在上面改安装Ubuntu系统。下面简单介绍下安装过程,自己留笔记,如果有碰到同样问题的能参考更…

信息收集之WAF绕过

信息收集之WAF绕过前言一、工具进行目录扫描1. 工具的下载2. 工具的使用二、Python代码进行目录扫描前言 对于web安全无WAF的信息收集,大家可以查看如下链接的文章: web安全之信息收集 对于有WAF信息收集,看如下所示:(…

opencv学习(二)图像阈值和平滑处理

图像阈值ret, dst cv2.threshold(src, thresh, maxval, type)src: 输入图,只能输入单通道图像,通常来说为灰度图dst: 输出图thresh: 阈值maxval: 当像素值超过了阈值(或者小于阈值,…

(数字图像处理MATLAB+Python)第四章图像正交变换-第一节:离散傅里叶变换

文章目录一:一维离散傅里叶变换(1)定义(2)实例二:一维快速傅里叶变换(1)定义(2)实例三:二维离散傅里叶变换(1)定义&#x…

Python入门教程+项目实战-7.4节: 程序实战-计算次大值

目录 7.2.1 计算四个中的次大值 7.2.2 使用循环计算次小值 7.2.3 系统学习python 7.2.1 计算四个中的次大值 假设有四个整型变量,该怎么计算四个中的次大值? 初学者解出这道题并不困难,但是将代码写得简洁优雅却是一个不小的挑战。 直接通…

aspnet016计算机组成原理精品课程shfw程序

2网站项目范围 计算机组成原理精品课程系统从两种用户角度进行功能划分。 1、学生部分: 1.1:新闻查看; 1.2:课程公告查看; 1.3:用户注册; 1.4:在线留言; 1.5&#xf…

Spring Boot 配置文件配置自动提示 Configuration Processor

效果 在使用Idea等开发工具时,配置文件中输入前缀就有对应的补全提示,使开发者可以很方便配置相应属性,效果截图如下: 元数据说明 这些提示来自于 spring 自动配置规范中的源数据文件 spring-configuration-metadata.json 和 ad…

百度储瑞松谈智能驾驶:极个别车厂才能做全栈自研

百度集团副总裁、智能汽车事业部总经理储瑞松在百人会论坛表示,汽车智能化系统不同于车企所熟悉的以金属件为主的车辆其他部分的系统,是一个以硬件为载体、由算法软件驱动的大规模动态系统,它的复杂性比起以金属件为主的系统是指数级增长的。…

【环境与工具】IDE配置——vscode配置

配置vscode的 Python , C 的编译环境 2. Python 2.1 Python解释器 2.1.1 安装python环境 2.1.2 创建vscode-python文件夹 裸配置 如图,与在命令行运行无区别 2.1.2 安装vscode-python插件 2.1.3 code插件运行.py 添加配置文件 program 设置启动文件 "progr…
最新文章