Docker系列教程26

您所在的位置:网站首页 dockercompose启动顺序控制 Docker系列教程26

Docker系列教程26

2023-10-07 08:59| 来源: 网络整理| 查看: 265

在生产中,往往有严格控制服务启动顺序的需求。然而Docker Compose自身并不具备该能力。要想实现启动顺序的控制,Docker Compose建议我们使用:

wait-for-it

dockerize

wait-for

本文演示如何使用wait-for-it 来控制服务的启动顺序,其他两款工具的使用方法大同小异,读者可自行研究。

还用前面编排WordPress博客的例子,现在我们想让MySQL先启动,启动完成后再启动WordPress。

分析

分析:找到WordPress的Dockerfile:https://github.com/docker-library/wordpress/blob/666c5c06d7bc9d02c71fd48a74911248be6f5a5b/php5.6/apache/Dockerfile

可看到类似如下的内容:

COPY docker-entrypoint.sh /usr/local/bin/

ENTRYPOINT ["docker-entrypoint.sh"]

CMD ["apache2-foreground"]

也就是说,这个WordPress的Dockerfile执行了命令: docker-entrypoint.sh apache2-foreground 。

 

wait-for-it

在wait-for-it的官方GiTHub中,有详细的例子:

要想使用wait-for-it,只需使用如下形式即可:

wait-for-it.sh 想等的地址:端口 -- 原本想执行的命令

答案

分析到这里,答案就很简单了:只需在WordPress的容器中添加wait-for-it.sh,然后将原本的命令用wait-for-it包裹,即可实现控制启动顺序的目标。

version: '2'

services:

 mysql:

   image: mysql:5.7

   expose:

     - "3306"

   environment:

     - MYSQL_ROOT_PASSWORD=123456

 wordpress:

   image: wordpress

   ports:

     - "80:80"

   volumes:

     - ./wait-for-it.sh:/wait-for-it.sh

   environment:

     - WORDPRESS_DB_HOST=mysql

     - WORDPRESS_DB_USER=root

     - WORDPRESS_DB_PASSWORD=123456

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

   command: ["apache2-foreground"]

参考文档

《Controlling startup order in Compose》:https://docs.docker.com/compose/startup-order/ 。

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3