zoukankan      html  css  js  c++  java
  • Docker-compose编排微服务顺序启动解决方案

    实际项目中遇到的问题,eureka server如果在其他service后启动,会导致部分service一直无法注册成功,

    参考网上的经验,原文:https://www.jianshu.com/p/d2f39703bcb5,做下总结:

    主要三种方式,其中第一种是无效的,但是很多博客没更新。

    1. 用到了docker-compose 中的 restart配置:restart: always

    2. 拆分原来的docker-compose.yml,分成两部分部署, 将要先启动的服务放在一个docker-compose中,后启动的服务放在第二个docker-compose中,

    启动两次,需要在networks标签中指定两者使用同一个网络。

    $ docker-compose -f docker-compose-commond.yml up
    

     3. 同步等待,使用shell脚本阻止当前服务启动,直到所需依赖的服务全部启动之后再启动当前服务。docker-compose文件中在服务下加入entrypoint,注:这种写法会覆盖dockerfile中的entrypoint和cmd,一定要注意!

    volumes: - "./entrypoint.sh:/entrypoint.sh" 
    environment: SLEEP_SECOND: 4 
    tty: true
    entrypoint: /entrypoint.sh -d simonEureka:8100 -c 'java -jar config-server.jar';
    

     entrypoint.sh如下,网上抄来的,可以根据需求自行定制:

    #!/bin/bash
    
    : ${SLEEP_SECOND:=2} #默认两秒后重试
    wait_for() { 
    	echo Waiting for $1 to listen on $2...
    	while ! ncat -z $1 $2; #nc命令用telnet协议测试端口
    	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//,/ } ### ${DEPENDS//,/ }把DEPENDS中的,替换为空格
    do 
    	host=${var%:*} 
    	port=${var#*:} 
    	wait_for $host $port 
    done 
    eval $CMD ##eval命令相当于把$CMD中的命令执行一次
    #避免执行完命令之后退出容器
    tail -f /dev/null
    
    乌龟虽然跑的慢但是比兔子长寿啊
  • 相关阅读:
    swoole 安装方法 使用即时聊天
    git的介绍以及简单应用
    curl的应用
    linux下监听和同步代码配置
    mac skim 修改背景色
    php 编译安装的一个 configure 配置
    mac mysql error You must reset your password using ALTER USER statement before executing this statement.
    yii2 控制器里 action 大小写组合造成的路由问题
    warning : json_decode(): option JSON_BIGINT_AS_STRING not implemented in xxx
    redis 自启动脚本
  • 原文地址:https://www.cnblogs.com/nieqibest/p/9826940.html
Copyright © 2011-2022 走看看