DockerのMySQLでdocker-entrypoint-initdb.dの完了を待つ
DockerのMySQLでdocker-entrypoint-initdb.dの完了を待つ方法です。
docker-compose up -d のタイミングで実行する sql, sh などが長いと立ち上がりに時間がかかり実行が遅くなります。
CIの時とかはそれだと困るので待つ方法のメモです。
docker-compose.yml
version: "3.7"
services:
mysql:
image: mysql:8.0.20
container_name: swiswiswift-mysql
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: swiswiswift-db
command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
ports:
- 3306:3306
volumes:
- ./sleep.sh:/docker-entrypoint-initdb.d/sleep.sh
script.sh
#!/bin/bash
docker-compose up -d
until docker exec swiswiswift-mysql mysql -h 127.0.0.1 -u root --password=password -e 'select "connection test"'; do sleep 1 ; done
echo "Script Finish!!"
sleep.sh
#!/bin/bash
echo "Sleep Start"
sleep 10
echo "Sleep Finish"
