在使用docker compose 3启动我的应用程序之前,我应如何确保数据库已启动

时间:2018-07-05 19:03:59

标签: docker docker-compose

我有一个经典的PHP 7 / MySQL / Nginx API,我想通过dockerise

事情是当我运行docker compose时,应用程序在db准备就绪之前启动了,所以失败了:

version: '3.3'

services:
  db:
    image: mysql:5.7
    ports:
      - "3306:3306"
    volumes:
      - db_data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: jaumo
      MYSQL_USER: root
      MYSQL_PASSWORD: password
  app:
    image: repo/myimage
    environment:
          MYSQL_ROOT_PASSWORD: password
          MYSQL_DATABASE: mydb
          MYSQL_USER: root
          MYSQL_PASSWORD: password
    ports:
      - 8000:80
    depends_on:
          - "db"
volumes:
  db_data:

official doc指出:

  

depends_on在启动Web之前不会等待db和Redis处于“就绪”状态-仅在它们启动之前。如果需要等待服务就绪,请参阅控制启动顺序以获取有关此问题的更多信息以及解决方案。

     

版本3不再支持depends_on的条件形式。

所以基本上,在版本2中,我可以添加heathcheck条件,这很容易,但是现在,我不知道该怎么做,而且文档也没有提供任何替换方法。

我该怎么办?这是一个很常见的情况...

1 个答案:

答案 0 :(得分:0)

我在之前的一些回答中详细介绍了该过程,因为需要一些解释。这是ref。基本上,您编写一个wait-for-it脚本,等待http响应-然后只有postgres / oracle / mysql之类的数据库才可以工作。