Docker容器依赖link连接按顺序启动方式

 更新时间:2023年05月18日 14:20:01   作者:神神的蜗牛  
这篇文章主要介绍了Docker容器依赖link连接按顺序启动方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

Docker 中的容器一般都会遇到相互之间服务依赖的问题,通过 --link 指定一个或多个依赖容器服务,但启动的时候却因为容器内的服务启动的延时不确定,并不能保证所有容器都能成功启动,于是需要强制按容器内的服务顺序来启动容器。

需要一个工具

先下载这个脚本, 然后根据项目中容器的服务依赖顺序配置就可以了, 唯一的问题就是服务都需要有可访问的端口.

举个栗子

nginx 依赖 php-fpm 依赖 redis | mysql

那么就倒序启动, web_up.sh

wait_for_it=/zzstore/my-tools/wait-for-it/wait-for-it.sh
docker container start my-mysql-8.0 && \
$wait_for_it -s -t 15 localhost:16033 -- echo 'mysql is up ~'       && docker container start redis-6.2-19736 && \
$wait_for_it -s -t 15 localhost:19736 -- echo 'redis-19736 is up ~' && docker container start redis-6.2-19740 && \
$wait_for_it -s -t 15 localhost:19740 -- echo 'redis-19740 is up ~' && docker container start my-php-8.0-fpm  && \
$wait_for_it -s -t 15 localhost:9080  -- echo 'php-fpm is up ~'     && docker container start my-nginx-1.20   && \
$wait_for_it -s -t 15 localhost:80    -- echo 'nginx is up ~'
  • -s: 表示严格模式, 若检测的服务在
  • -t: xx秒 内没有启动, 则终止后续所有命令.

这个脚本是在宿主机上运行的, 监听的端口也都是宿主机上的端口, 如: 16033 映射 mysql 容器内 3306

也可以用来监听 Docker 服务的启动状态:

wait_for_it=/zzstore/my-tools/wait-for-it/wait-for-it.sh
$wait_for_it -s -t 60 localhost:2375  -- echo 'docker is up ~'      && docker container start my-mysql-8.0    && \
$wait_for_it -s -t 15 localhost:16033 -- echo 'mysql is up ~'       && docker container start redis-6.2-19736 && \
$wait_for_it -s -t 15 localhost:19736 -- echo 'redis-19736 is up ~' && docker container start redis-6.2-19740 && \
$wait_for_it -s -t 15 localhost:19740 -- echo 'redis-19740 is up ~' && docker container start my-php-8.0-fpm  && \
$wait_for_it -s -t 15 localhost:9080  -- echo 'php-fpm is up ~'     && docker container start my-nginx-1.20   && \
$wait_for_it -s -t 15 localhost:80    -- echo 'nginx is up ~'

等 Dockerd 服务启动后自动按服务顺序启动所有容器.

至于 -t 参数的时长可以在服务器上先测试一下根据实际情况再调整下.

全部正常成功启动的效果图

Docker多容器link连接后按顺序启动容器


上面的启动命令每个 -- 后的所有命令都是一个整体, 前面没有执行成功后面都不会触发.

再来测试下启动失败的情况

当前容器全部已启动的状态, 我们关闭其中一个依赖的服务 redis-6.2-19740 然后再执行脚本.

docker container stop redis-6.2-19740
wait_for_it=/zzstore/my-tools/wait-for-it/wait-for-it.sh
$wait_for_it -s -t 60 localhost:2375  -- echo 'docker is up ~'      && docker container start my-mysql-8.0    && \
$wait_for_it -s -t 15 localhost:16033 -- echo 'mysql is up ~'       && docker container start redis-6.2-19736 && \
#$wait_for_it -s -t 15 localhost:19736 -- echo 'redis-19736 is up ~' && docker container start redis-6.2-19740 && \
$wait_for_it -s -t 15 localhost:19740 -- echo 'redis-19740 is up ~' && docker container start my-php-8.0-fpm  && \
$wait_for_it -s -t 15 localhost:9080  -- echo 'php-fpm is up ~'     && docker container start my-nginx-1.20   && \
$wait_for_it -s -t 15 localhost:80    -- echo 'nginx is up ~'

wait-for-it.sh: timeout occurred after waiting 15 seconds for localhost:19740
wait-for-it.sh: strict mode, refusing to execute subprocess

由于 redis-6.2-19740 没有启动, 而且使用了 -sstrict mode 因此后续存在依赖的命令全都不会执行了.

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • docker搭建logstash和使用方法详解

    docker搭建logstash和使用方法详解

    这篇文章主要介绍了docker搭建logstash和使用方法详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-12-12
  • Docker、Podman 和 Containerd 三者区别解析

    Docker、Podman 和 Containerd 三者区别解析

    Docker、Podman 和 Containerd 是三种流行的容器工具,它们都用于容器的创建、管理和运行,但它们在设计理念、功能和使用场景上有一些差异,这篇文章主要介绍了Docker、Podman 和 Containerd 三者区别,需要的朋友可以参考下
    2025-02-02
  • 通过Docker创建CentOS容器的实现步骤

    通过Docker创建CentOS容器的实现步骤

    本文主要介绍了Docker创建CentOS容器,使用文内的脚本可以快速创建CentOS 7.8虚拟系统集群,并通过SSH(Secure Shell)远程工具连接,感兴趣的可以了解一下
    2021-11-11
  • 手工制作docker镜像-包含多个服务ssh+nginx

    手工制作docker镜像-包含多个服务ssh+nginx

    这篇文章主要介绍了手工制作docker镜像-包含多个服务ssh+nginx,需要的朋友可以参考下
    2024-07-07
  • docker-compose安装RabbitMQ及插件操作步骤

    docker-compose安装RabbitMQ及插件操作步骤

    这篇文章主要为大家介绍了docker-compose安装RabbitMQ及插件操作步骤详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • docker搭建php+nginx+swoole+mysql+redis环境的方法

    docker搭建php+nginx+swoole+mysql+redis环境的方法

    这篇文章主要介绍了docker搭建php+nginx+swoole+mysql+redis环境的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-03-03
  • docker 实现容器与宿主机无缝调用shell命令

    docker 实现容器与宿主机无缝调用shell命令

    这篇文章主要介绍了docker 实现容器与宿主机无缝调用shell命令的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随想过来看看吧
    2021-03-03
  • 详解docker-compose.yml文件常用模版命令

    详解docker-compose.yml文件常用模版命令

    这篇文章主要介绍了docker-compose.yml文件常用模版命令,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2021-11-11
  • Docker绑定端口后仍无法远程直接访问的解决方法

    Docker绑定端口后仍无法远程直接访问的解决方法

    在Docker中,如果容器的端口绑定错误或只绑定到了容器的内部IP地址,将导致外部主机无法访问该端口,所以本文小编给大家介绍了Docker绑定端口后仍无法远程直接访问的解决方法,需要的朋友可以参考下
    2024-09-09
  • 利用Docker部署PostgreSQL 12.4主从方式

    利用Docker部署PostgreSQL 12.4主从方式

    这篇文章主要介绍了利用Docker部署PostgreSQL 12.4主从方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12

最新评论