夜莺5.0版本一开始就提供了docker-compose方式启动,一键就可以体验,真的非常方便,但是,理想很丰满,现实很骨干,docker-compose方式启动,经常会有部分容器失败,怎么个原理呢?
主要是因为MySQL的容器虽然启动了,但是容器内的MySQL进程启动太慢,导致依赖MySQL的其他容器启动失败,docker-compose配置文件中可以配置depends_on,来描述容器之间的依赖关系,但是无法解决这个问题,原因是容器确实按照顺序启动了,但是MySQL进程太慢。
这算是一个已知问题,迟迟没有功夫解决,前段时间社区有人提了issue,给了一个解决方案,issue #902 大家可以去围观下,还附了一篇博客,写的挺好的。
不过,博客里使用的方式使用nc命令做探测,夜莺默认使用的镜像中没有内置nc命令,后来去github找了一个小工具,ufoscout/docker-compose-wait 专门来解决这个问题,rust编写的,挺好用的。
具体解法:
1、首先打镜像的时候,顺便把wait工具打进去,大家可以看一下docker/Dockerfile文件,做了一些调整,包括n9e的镜像和ibex的镜像
2、修改docker-compose的配置文件,把依赖的组件写到环境变量里,在启动命令里先执行/wait,/wait完事了再执行具体的业务启动命令,比如nserver部分:
nserver:image: ulric2019/nightingale:5.7.1container_name: nserverhostname: nserverrestart: alwaysenvironment:GIN_MODE: releaseTZ: Asia/ShanghaiWAIT_HOSTS: mysql:3306, redis:6379volumes:- ./n9eetc:/app/etcports:- "19000:19000"networks:- nightingaledepends_on:- mysql- redis- prometheus- ibexlinks:- mysql:mysql- redis:redis- prometheus:prometheus- ibex:ibexcommand: >sh -c "/wait && app/n9e server"
大家git pull一下夜莺的最新代码,进入docker目录,执行docker-compose up -d 就可以体验啦。注意,镜像是linux/amd64的,新版本的macbook如果是m1的芯片,还无法运行~
文章转载自夜莺监控,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




