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"]