docker-compose启动服务的时候是没有加载顺序的,这就容易导致问题,比如有时候如果应用起来了,mysql还没起来,应用就会报错。由于docker-compose自身没提供解决方法,所以需要找其他方法达到顺序加载效果:

方法一:

docker-compose.yaml文件中的应用节点添加restart: always 表示如果服务启动不成功会一直尝试,虽然能够达到效果,但是不推荐使用。

方法二(推荐):使用wait-for-it

wait-for-it.sh是一个等待直到host和tcp稳定连接的bash脚本,而且是纯的没有任何外部依赖。
首先把脚本挂进容器:

1
2
volumes:
- ./wait-for-it.sh:/wait-for-it.sh

然后再应用启动的时候使用脚本:

1
entrypoint: "sh /wait-for-it.sh mysql:3306 -- docker-entrypoint.sh"