Как я должен быть уверен, что база данных запущена перед запуском моего приложения с докером compose 3? - PullRequest
0 голосов
/ 05 июля 2018

У меня есть классический PHP 7 / MySQL / Nginx API, который я хочу докеризировать

Дело в том, что, когда я запускаю свою докерскую композицию, приложение запускается до того, как БД будет готова, поэтому оно не будет работать:

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:

Официальный документ гласит:

disabled_on не ждет, пока db и redis будут «готовы» перед запуском web - только до тех пор, пока они не будут запущены. Если вам нужно дождаться готовности службы, см. Раздел «Управление порядком запуска» для получения дополнительной информации об этой проблеме и стратегиях ее решения.

Версия 3 больше не поддерживает форму условия depen_on.

Так что, в принципе, в версии 2 я мог бы добавить условие проверки хита, это было довольно легко, но сейчас я не знаю, как это сделать, и документы не дают никакого метода замены.

Как мне поступить? Это довольно распространенный случай ...

1 Ответ

0 голосов
/ 05 июля 2018

Я подробно описал этот процесс в нескольких моих предыдущих ответах, поскольку он требует небольшого объяснения. Вот это ref . По сути, вы пишете сценарий wait-for-it, который ожидает ответа http - тогда и только тогда базы данных, такие как postgres / oracle / mysql, готовы к работе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...