概要

docker-compose 可以方便组合多个 docker 容器服务, 但是, 当容器服务之间存在依赖关系时, docker-compose 并不能保证服务的启动顺序.

docker-compose 中的 depends_on 配置是容器的启动顺序, 并不是容器中服务的启动顺序.

问题重现

首先, 我们构造一个示例, 来演示 docker-compose 带来的问题. docker-compose.yml 文件如下:

启动后, 可以发现, 确实是先启动 database, 后启动 web, 但是 database 中的服务是在大约 5 秒后才完成的, 所以导致 web 的启动失败.

问题解决方式 1.0

修改 web 的启动脚本, 等待 database 的端口通了之后再启动服务

再次启动,

web 会在 database 启动完成, 端口通了之后才启动.

问题解决方式 2.0

上面的解决方式虽然能够解决问题, 但是在 yaml 中直接插入脚本不好维护, 也容易出错. 如果有多个依赖, 或者多层依赖的时候, 复杂度会直线上升.

所以, 要封装一个 entrypoint.sh 脚本, 可以接受启动命令, 以及需要等待的服务和端口. 脚本内容如下:

这个脚本有 2 个参数, -d 需要等待的服务和端口, -c 等待的服务和端口启动之后, 自己的启动命令

修改 docker-compose.yml, 使用 entrypoint.sh 脚本来控制启动顺序.

实际使用中, 也可以将 entrypoint.sh 打包到发布的镜像之中, 不用通过 volumes 配置来加载 entrypoint.sh 脚本.

测试结果如下:

补充

依赖多个服务和端口

使用上面的 entrypoint.sh 脚本, 也可以依赖多个服务和端口, -d 参数后面的多个服务和端口用逗号(,)隔开.

执行的效果可以自行尝试.

尝试间隔的配置

每次尝试连接的等待时间可以通过 环境变量 SLEEP_SECOND 来配置, 默认 2 秒 下面的配置等待时间设置为 4 秒, 就会每隔 4 秒才去尝试 mysql 服务时候可连接.

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://www.cnblogs.com/wang_yb/p/9400291.html

服务器引导顺序,docker compose 服务启动顺序控制的方法相关推荐

  1. docker compose 服务启动顺序控制

    docker-compose 可以方便组合多个 docker 容器服务, 但是, 当容器服务之间存在依赖关系时, docker-compose 并不能保证服务的启动顺序. docker-compose ...

  2. dockers-系统学习-docker compose服务编排

    dockers-系统学习-docker compose服务编排 一.服务编排 1.1.概念 按照一定的业务规则批量管理容器 1.2.问题 微服务架构的应用系统中一般包含若干个微服务,每个微服务一般都会 ...

  3. 解决sendmail服务启动慢的方法

    解决sendmail服务启动慢的方法 1.检查你的/etc/sysconfig/network配置文件 [root@LNMP_SERVER ~]# grep "HOSTNAME" ...

  4. mysql安装服务和安装中常见问题install/Remove of the Service Denied与net start mysql服务启动失败解决方法

    mysql安装服务和安装中常见问题install/Remove of the Service Denied与net start mysql服务启动失败解决方法 参考文章: (1)mysql安装服务和安 ...

  5. windows服务启动路径修改方法

    ** windows服务启动路径修改方法 1.进入服务,查看路径,[开始]=>[运行]=>[services.msc] 2.进入注册表,修改服务路径[开始]=>[运行]=>[r ...

  6. 计算机管理中be启动不了,绝地求生BE服务启动失败解决方法 绝地求生游戏无法启动怎么办...

    绝地求生BE服务启动失败解决方法,绝地求生游戏无法启动怎么办?绝地求生BE服务启动失败怎么解决?想必不少友友都不太清楚吧?下面跟随小编冉冉一起去看看吧! 绝地求生BE服务启动失败怎么办 过一阵窗口消失 ...

  7. 【Docker系列】Docker Compose 服务依赖和健康检查

    准备 不想再写一遍了,请看上篇文章的文件准备:[Docker系列]Docker Compose 环境变量 服务依赖 docker-compose.yml 添加depends_on参数 启动顺序: re ...

  8. Docker Compose 服务编排

    微服务架构中一般会有多个微服务,每一个微服务一般都会部署多个实例,如果每一个服务都手动启动,工作量会很大.服务编排就是按照一定的业务规则进行批量管理容器. docker基础请参考 Docker相关内容 ...

  9. named域名解析服务启动失败解决方法

    关于named服务启动失败的解决方法 前言: 相信很多刚接触Linux的人,都有配置过bind域名解析系统吧,但是大部分人都是自学配置该服务,而去照着书上敲或者视频等资料敲的时候都能成功允许该服务.但 ...

最新文章

  1. 延展信息按单制造ERP荣获2012中国软件优秀解决方案奖
  2. JavaSE(十)——set和map集合、异常、File类
  3. [数论]拓展中国剩余定理
  4. Spring之SpringMVC(四)
  5. jsp获取java数组长度_数组 – 如何在java jsp中获取数组列表大小?
  6. django给mysql配主从_django中的mysql主从读写分离:一、配置mysql主从分离
  7. 到底什么培训适合你?
  8. 【经典算法】——KMP,深入讲解next数组的求解
  9. 在打包的时候,创建应用程序池,并自动将程序assign到新创建的池中(MSI制作)
  10. 轻量化网络:MobileNets
  11. python访问带密码的共享文件夹_设置带密码和读写权限的共享文件夹 - Hakka
  12. #上位机开发大师之路# Qt5的环境搭建
  13. 关键词: iostream 和 iostream.h
  14. matlab程序 直线插补,用Matlab实现直线插补计算程序讲解学习
  15. Redundant Paths(边双连通分量缩点+思维构造)
  16. python发行版是什么意思_致 Python 初学者
  17. java 计算行驶里程,js根据经纬度换算行驶里程
  18. python爬虫 — 爬取淘宝商品信息
  19. 微信小程序连接华为云ModelArts的方法以及一些小坑(一)
  20. Jzoj3176 蜘蛛侠

热门文章

  1. SAP云平台cf push命令报错的解决方法
  2. 来自ERP的product属性修改
  3. CRM and S4 Fiori UI coexistence
  4. 今日头条Web HTTP请求的白名单
  5. WebSocket客户端连接断开后,服务器端的析构处理
  6. 如何在AWS亚马逊云上运行Angular应用
  7. C4C权限控制的一些特色功能和测试
  8. 有道云笔记不需要通过开通会员的方式来去除广告显示
  9. SAP标准培训课程C4C10学习笔记(二)第二单元
  10. 道路交通安全违法行为图像取证技术规范_海康移动取证方案中的设备介绍