Docker-compose编排微服务顺序启动解决方案

摘要:
$docker-compose-fdocker-compose-commond.ymlup3.同步等待,使用shell脚本阻止当前服务启动,直到所需依赖的服务全部启动之后再启动当前服务。docker-compose文件中在服务下加入entrypoint,注:这种写法会覆盖dockerfile中的entrypoint和cmd,一定要注意!volumes:-"./entrypoint.sh:/entrypoint.sh"environment:SLEEP_SECOND:4tty:trueentrypoint:/entrypoint.sh-dsimonEureka:8100-c'java-jarconfig-server.jar';entrypoint.sh如下,网上抄来的,可以根据需求自行定制:#!

实际项目中遇到的问题,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

免责声明:文章转载自《Docker-compose编排微服务顺序启动解决方案》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇iOS图片压缩微软脱机实验五十微软应用程序虚拟化之五APPV 5.1脱机使用应用程序下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Docker Compose 版本过高(Docker版本不匹配),降低docker-compose版本

通过docker-compose启动容器,报错: ERROR: The Docker Engine version is less than the minimum required by Compose. Your current project requires a Docker Engine of version 1.10.0 or greater....

分布式数据库中间件 MyCat | 分库分表实践

MyCat 简介 MyCat 是一个功能强大的分布式数据库中间件,是一个实现了 MySQL 协议的 Server,前端人员可以把它看做是一个数据库代理中间件,用 MySQL 客户端工具和命令行访问;而后端人员可以用 MySQL 原生协议与多个 MySQL 服务器通信,也可以用 JDBC 协议与大多数主流数据库服务器通信。可以用作 读写分离、分库分表(分片)...

Docker之单多/机容器管理

Compose是用于定义和运行多容器Docker应用程序的工具。通过Compose,您可以使用YAML文件来配置应用程序的服务。然后,使用一个命令,就可以从配置中创建并启动所有服务。 Docker-Compose 安装: sudo curl -L "https://github.com/docker/compose/releases/download/1....

docker部署ASP.NET Core、Nginx、MySQL

2019/10/24, docker 19.03.4, ASP.NET Core 3.0, CentOS 7.6 摘要:ASP.NET Core 3.0 网站项目容器化部署,使用docker-compose编排Nginx容器、MySQL容器、web容器案例代码 依赖结构介绍 整个网站项目取名samplems,一共需要三个容器(按依赖顺序): 1.MySQL...

ubuntu 14.04 安装docker,docker-compose

通过阿里的镜像安装  curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sh - 如果安装依赖的时候到us的速度很慢,则先配置网易Ubuntu镜像加速包,参照:   http://www.cnblogs.com/windchen...

docker 搭建zookeeper集群和kafka集群

docker 搭建zookeeper集群 安装docker-compose容器编排工具 Compose介绍 Docker Compose 是 Docker 官方编排(Orchestration)项目之一,负责快速在集群中部署分布式应用。 Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。Compose 定位...