本文介绍了 tomcat 依赖于 mysql 的启动的一个例子
使用 docker-compose + wait-for-it.sh
先看个例子:
=== 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
command 用于覆盖容器启动后默认执行的命令
看下面这个例子:
把下面这个文件和刚才的Dockfile放到一个目录
==== docker-compose.yml =====
version: '3'
services:
web:
build: .
command: ["echo", "hiahia"]
===========================
运行
>docker-compose up
看到 hiahia 被输出
下载地址: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/