Docker-compouse автостарт PHP кода после полного старта контейнера с MySQL

Задача: автоматически подключить PHP к БД MySQL и создать таблицу, пользователя...

Проблема: сервис отвечающий за создание таблицы может подключиться только через несколько минут. скриншот терминала, запуск сервиса

На скриншоте видно, что оба сервиса стартуют, но у второго при подключении возникает ошибка. Буквально через 30-60 секунд повторил команду, MySQL продолжил работу, а PHP скрипт все успешно создал.

Пробовал реализовать аналогично примеру, но не вышло https://docs.docker.com/compose/startup-order/ Думаю просто у меня была проблема с реализацией.

Пробовал в PHP код добавить sleep(), контейнер дольше стал собираться (логично), но к MySQL так и не подключился

Вариант руками сделать docker-compouse exec - хороший, но цель - автоматизация

Отрывок из setup_db.php

<?php
   $conn = mysqli_connect('mysql', 'root', 'root');
   if ($conn->connect_error) {
      die("Connection failed: " . $conn->connect_error);
   }

   $sql = "CREATE DATABASE IF NOT EXISTS test28072022";
   if ($conn->query($sql) === TRUE) {
      echo "Database created successfully\n";
   } else {
      echo "Error creating database: " . $conn->error;
   }

docker-compose.yml:

version: "3"
services:
  mysql:
    image: mysql:8
    container_name: mysql
    ports:
      - '3306:3306'
    environment:
      MYSQL_ROOT_PASSWORD: 'root'
      MYSQL_ROOT_HOST: '%'
    networks:
      - localhost
    healthcheck:
      test: "/usr/bin/mysql --user=root --password=1231 --execute \"SHOW DATABASES;\""
      timeout: 20s
      retries: 10
     
  php:
    build: 
      context: .
      dockerfile: Dockerfile
    image: php_test/latest
    container_name: php_test
    environment:
      - VIRTUAL_HOST=portal.local
      - VIRTUAL_PORT=80
    networks:
      - localhost
    ports:
      - "9000:9000"
    volumes:
      - ./docker/src:/var/www/html:z

  nginx:
    image: nginx:latest
    networks:
      - localhost
    ports:
      - 80:80
    volumes:
      - ./docker/src:/var/www/html:z
      - ./docker/nginx/conf.d:/etc/nginx/conf.d:z

  init:
    image: php_test/latest
    container_name: php_test_init
    networks:
      - localhost
    volumes:
      - ./docker/src/setup_db.php:/usr/setup_db.php
      - ./docker/db.sh:/usr/db.sh
    depends_on:
      - mysql
    entrypoint: ["php", "/usr/setup_db.php"]

networks:
  localhost:
    external: true

Dockerfile:

FROM php:7.4-fpm-alpine

RUN apk --no-cache update \
    && apk --no-cache upgrade
RUN docker-php-ext-install mysqli

WORKDIR "/var/www/html"
CMD ["php-fpm", "-F", "-c", "/etc/php7/php.ini"]

Ответы (0 шт):