首页 > 技术文章 > wait-for-it.sh脚本控制docker-compose启动顺序详解

wangmo 2020-06-04 13:22 原文

原文:https://blog.csdn.net/wuzhong8809/article/details/82500722?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

 

说明
本文介绍了 tomcat 依赖于 mysql 的启动的一个例子

使用 docker-compose + wait-for-it.sh

基础知识
Dockerfile CMD 命令的作用
先看个例子:

=== Dockerfile ==============

FROM ubuntu:16.04

CMD ["echo", "hello my ubuntu"]

==========================

以上面这个Dockfile 为例

创建它

>docker build -t myubt .

 

docker run 不带参数

>docker run myubt

hello my ubuntu

 

执行 CMD ["echo", "hello my ubuntu"]

 

docker run 带参数

>docker run myubt echo haha

haha

CMD ["echo", "hello my ubuntu"] 没有执行,执行的是 echo haha

 

docker-compose command 命令的作用
command 用于覆盖容器启动后默认执行的命令

看下面这个例子:

把下面这个文件和刚才的Dockfile放到一个目录

==== docker-compose.yml =====

version: '3'

services:

web:

build: .

command: ["echo", "hiahia"]

===========================

运行

>docker-compose up

看到 hiahia 被输出

 

wait-for-it.sh
下载地址:https://github.com/vishnubob/wait-for-it

使用方式:

>wait-for-it.sh www.baidu.com:80 -- echo baiduok

说明:

通过端口是否处于监听连接的状态来判断服务是否已启动,如果服务启动了,就执行 -- 之后的指令。

 

比如下文例子中将要判断mysql 是否已启动,如果启动就执行 catalina.sh run

>wait-for-it.sh host_name : 3306 -- catalina.sh run

 

下面介绍使用 command 指令 + wait-for-it 脚本 来做 启动依赖

启动依赖
最后一点就是需要用把 wait-for-it.sh打包到镜像中

====Dockerfile========================

FROM tomcat:latest

COPY ./wait-for-it.sh /usr/local/tomcat/bin/

===================================

完整代码见:

https://github.com/zeson99/docker_demos/tree/master/depend_on_demo

 

测试:

>docker-compose up

参考
https://docs.docker.com/compose/startup-order/
————————————————
版权声明:本文为CSDN博主「Zonson9999」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wuzhong8809/article/details/82500722

推荐阅读