Docker容器配置启动顺序的三种方式

这篇具有很好参考价值的文章主要介绍了Docker容器配置启动顺序的三种方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

如果对你有帮助希望点赞收藏~

转载请注明出处~

欢迎批评、指点、讨论~

https://blog.csdn.net/L_Open2021/article/details/129901741

目录

1.问题描述

2.问题解决

方法1:通过 depends_on 结合 healthcheck 实现容器顺序启动(强烈推荐!)

 方案2:shell脚本弹窗被依赖(较复杂)

方案3:通过Docker file 设置延时启动(不推荐,伪顺序)


1.问题描述

在微服务项目中,多容器之间存在相关依赖的关系。

B容器启动时会调用A容器部分接口,所以存在B容器会由于A容器而启动失败的情况

2.问题解决

方法1:通过 depends_on 结合 healthcheck 实现容器顺序启动(强烈推荐!)

例:webB容器依赖了webA容器

先来看docker-compose

services:  
  webA:
    restart: always
    environment:
    MYSQL_PWD: 123456
    container_name: webA
    image: webA

    healthcheck:
	 # http://localhost:4000/health 为webA容器指定的健康检查接口
      test: ["CMD", "curl", "-f", "http://localhost:4000/health"]
     # 健康检查的间隔,默认为 30 秒,单位(h/m/s);
      interval: 30s 
	 # 健康检查命令运行超时时间,如果超过这个时间,本次健康检查就被视为失败,单位(h/m/s);
      timeout: 20s
	 # 当连续失败指定次数后,则将容器状态视为 unhealthy。
      retries: 5

  webB:
    restart: always
    environment:
      MYSQL_PWD: 123456
    container_name: webB
    image: webB
	# webA容器之后启动,并且webA容器的健康状态为healthy
    depends_on:
      webA: 
	    condition: service_healthy

webB容器启动前会根据webA容器的健康状态来判断是否启动,而webA容器的健康状态根据设定的healthcheck中指定的心跳监测接口来确定

服务调用关系是 webA -> webB,我们的服务由于存在token校验机制,就算服务启动成功了,直接调用 [ip:端口]还是会失败【curl: (22) The requested URL returned error: 424】

所以在webA服务中增加了一个开放的可以绕过token校验的接口用于服务心跳监测,从而判断健康状态

webA服务启动时会自动监测健康状态,直到确认为unhealthy时,bgi服务会启动失败

实际案例(顺序 upms -> bgi -> thingsboard):

失败时: 

Docker容器配置启动顺序的三种方式

 等待状态:

Docker容器配置启动顺序的三种方式Docker容器配置启动顺序的三种方式成功状态:

Docker容器配置启动顺序的三种方式

 方案2:shell脚本弹窗被依赖(较复杂)

        思路:在容器启动命令执行之前,跑一个shell脚本,通过shell nc 端口探测被依赖容器来确定被依赖的容器是否ready,随后再去启动后者。

        1. 直接手写shell脚本,通过 nc 端口探测。

https://blog.51cto.com/topic/docker-rongqiqidongshunxu.html

        2. github上的一个开源项目 wait-for-it,拆箱即用

https://www.jianshu.com/p/c54899d50d05

方案3:通过Docker file 设置延时启动(不推荐,伪顺序)

思路:根据服务实际启动时间,对每个服务进行合理的延时时间分配 文章来源地址https://www.toymoban.com/news/detail-470328.html

到了这里,关于Docker容器配置启动顺序的三种方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Docker安装的三种方式

    下载解压: 配置镜像加速: 作为服务启动: 启动: 下载地址: https://download.docker.com/linux/centos/7/x86_64/stable/Packages/ 从 docker 安装包版本下载对应所有依赖包: 将依赖包移动到安装包目录下: 安装: 开启docker并将其设置成开机自启动: 配置镜像加速: 卸载: 卸载旧版本:

    2024年02月11日
    浏览(54)
  • docker容器:docker镜像的三种创建方法及dockerfile案例

    目录 一、基于现有镜像创建 1、创建启动镜像 2、生成新镜像 二、基于本地模板创建  1、OPENVZ 下载模板 2、导入容器生成镜像 三、基于dockerfile创建  1、dockerfile结构及分层 2、联合文件系统 3、docker镜像加载原理 4、dockerfile操作常用的指令 (1)FROM指令 (2)MAINTAINER 指令 (3)RUN指令

    2023年04月20日
    浏览(54)
  • docker ps -a命令以及容器的三种状态

    docker ps -a命令用于列出所有的Docker容器,包括正在运行和已经停止的容器。该命令的输出结果包含以下信息: CONTAINER ID:容器的唯一标识符; IMAGE:容器所使用的镜像; COMMAND:容器启动时执行的命令; CREATED:容器的创建时间; STATUS:容器的状态; PORTS:容器所使用的端口

    2024年02月07日
    浏览(57)
  • docker 查看日志的三种方式

    docker logs命令是 Docker 的日志管理工具,它能够在终端中打印出容器的标准输出和错误输出。

    2024年04月25日
    浏览(62)
  • Docker 实现挂载的三种方式

    容器中运行的应用,有可能会产生数据,如果将数据直接存储到容器中,如果删除容器时,容器中的数据会一起被删除,例如: 如果运行的是数据库容器,数据库容器直接保存的数据文件,删除容器时,容易导致数据丢失 为了防止数据丢失,可以把数据保存到宿主机上,这样有便于容器之间

    2024年01月23日
    浏览(49)
  • Docker——常用挂载的三种方式

    在 Docker 中,有三种常见的挂载方式,它们分别是: 绑定挂载(Bind Mounts) :绑定挂载是将主机上的文件或目录挂载到容器中。这种挂载方式允许容器与主机之间共享文件和目录,并且对其中一个的更改会直接影响到另一个。可以通过在运行容器时使用  -v  或  --mount  参数

    2024年02月12日
    浏览(56)
  • docker 数据挂载的三种方式

    目录 前言 更详细的Diff 适合Volumes的场景 适合bind mounts的场景 适合tmpfs mounts的场景 使用 前言 回到目录 我们可以将数据写到容器的可写入层,但是这种写入是有缺点的: 当容器停止运行时,写入的数据会丢失。你也很难将这些数据从容器中取出来给另外的应用程序使用。 容

    2024年02月06日
    浏览(58)
  • Docker系列---【Docker设置时区的三种方式】

    将宿主机与容器的时间进行挂载,直接使用宿主机的时区

    2024年02月17日
    浏览(44)
  • Docker存储目录迁移的三种方式

    背景: 随着docker的使用时间越来越长,导致镜像和容器越来越多,占满了系统盘空间,这时,我们需要给它们搬个家了 下面咱们提供三种方式 docker info :查看docker的存储等相关信息 1、停止docker 服务 2、备份数据到新的存放路径 3、备份 /var/lib/docker 路径 4、创建软连接 5、启

    2024年02月07日
    浏览(64)
  • 为Java应用创建Docker镜像的三种方式

    在 Dockerfiles 出现的很久之前,Java 开发者大多使用单体应用方式部署(WARs, JARs, EARs, 等等)。现在如你所知,最好的做法是为每个小业务单独部署的微服务方式。你构建的不是一个巨大的单体应用程序,而是使多个可以独立运行的小服务。 这正是 Docker 的用武之地。如果你想

    2023年04月26日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包