【Docker】docker-entrypoint-initdb.d内ファイルっていつ呼ばれるのよ
//
タイトル通り
初歩的な内容です。いつ呼ばれるというのは、"タイミング"の話ではなく、"初回起動時"とかそんな感じです。
docker-compose.yml
大体こんな感じの設定でビルドしてます。
#docker-compose.yml version: '3' services: ... db: image: mysql:8.0 container_name: mysql command: mysqld --sql_mode="" environment: - TZ=Asia/Tokyo volumes: - "./sql:/docker-entrypoint-initdb.d" - "./mysql_data:/var/lib/mysql"
たどる
mysql8.0
ではdocker-entrypoint.sh
内の次の行にてファイルが呼ばれている。
# docker-entrypoint.sh for f in /docker-entrypoint-initdb.d/*; do process_init_file "$f" "${mysql[@]}" done # https://github.com/docker-library/mysql/blob/696fc899126ae00771b5d87bdadae836e704ae7d/8.0/docker-entrypoint.sh
mysql/docker-entrypoint.sh at 696fc899126ae00771b5d87bdadae836e704ae7d · docker-library/mysql · GitHub
そしてこのコードは次の条件から分岐している。
# docker-entrypoint.sh if [ ! -d "$DATADIR/mysql" ]; then .... # https://github.com/docker-library/mysql/blob/696fc899126ae00771b5d87bdadae836e704ae7d/8.0/docker-entrypoint.sh#L100
$DATADIR
はとりあえずdatadir
の値が来ているようで、設定上/var/lib/mysql
に対応していた。
https://github.com/docker-library/mysql/blob/fc3e856313423dc2d6a8d74cfd6b678582090fc7/8.0/config/my.cnf#L25
ので、上のdocker-compose.yml
では/var/lib/mysql
にmysql_data
ディレクトリをマウントしているため、今回であれば初回起動時もしくはmysql_data
ディレクトリが空の時、docker-entrypoint-initdb.d
内の.sql
ファイル等が呼ばれる気がする。