【Docker】DBの起動完了を待ってから他のサービスを起動する方法
はじめに
本記事は、プログラミング初学者、学習を進めていて疑問に思った点について調べた結果を備忘録も兼ねてまとめたものです。
そのため、記事の内容に誤りが含まれている可能性があります。ご容赦ください。
間違いを見つけた方は、お手数ですが、ご指摘いただけますと幸いです。
DBの起動完了を待ってから他のサービスを起動する方法
docker-compose.ymlのdepends_on/conditonを設定する方法
以下のようにdepends_on
にcondition
service_healthyを設定し、dbのhealthcheck
にtest
を設定することでDBの起動完了後に他のサービスを起動させることができます。
test
のインターバルがデフォルトでは30秒ほどのようでヘルスチェックに時間がかかるため、intarval
を1s
に設定しています。
docker-compose.yml
version: '${COMPOSE_VER}'
services:
db:
platform: linux/x86_64
image: mysql:${DB_IMAGE_TAG}
command: --default-authentication-plugin=mysql_native_password && bash -c "chmod +x /docker-entrypoint-initdb.d/00_grant.sh"
healthcheck:
test: mysqladmin ping -h db -u$${MYSQL_USER} -p$${MYSQL_PASSWORD}
interval: 1s
volumes:
- mysql_data:/var/lib/mysql
- ${MY_CNF_PATH}:/etc/mysql/conf.d/my.cnf
- ${INITDB_PATH}:/docker-entrypoint-initdb.d
env_file:
- ${DB_ENV_FILE_PATH}
ports:
- "${DB_PORT}:3306"
api:
build:
context: .
dockerfile: ./docker/api/Dockerfile
command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
volumes:
- .:/myapp
environment:
RAILS_ENV: ${APP_ENV}
ports:
- "${API_PORT}:3000"
depends_on:
db:
condition: service_healthy
volumes:
mysql_data:
Author And Source
この問題について(【Docker】DBの起動完了を待ってから他のサービスを起動する方法), 我々は、より多くの情報をここで見つけました https://qiita.com/P-man_Brown/items/cb37e81a5b4c2e84410f著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .