Docker Toolbox利用時のお話です。
docker-composeでMySQLのコンテナを立ち上げ、かつ立ち上げ時にSQLを実行するよう docker-compose .ymlを組んだのですが。。。
SQLが実行されません。
docker-compose.ymlのvolumesで、 コンテナ起動時に実行したいSQLファイルをdocker-entrypoint-initdb.dに渡すことで、SQLファイルを自動で実行してくれるはずなのですが。
docker-compose.ymlと、SQLファイルのディレクトリは以下の通り。
version: "3"
services:
mysql:
image: mysql:5.7
container_name: mysql
environment:
MYSQL_ROOT_PASSWORD: mysql
volumes:
- C:\docker_work\mysql\sql:/docker-entrypoint-initdb.d
docker_work
|
|---mysql
| docker-compose.yml
|
|---sql
01_ddl.sql
ローカルにあったSQLファイルファイルが、コピーできてない。
原因
VirtualBoxの共有フォルダー設定。
この共有フォルダー設定で、マウントされているフォルダの配下に、コンテナへコピーしたいファイルを配置しておかないといけない模様。
ということで、docker-compose.ymlでのvolumesの指定を、次のように修正。
SQLファイルも、Usersフォルダ以下に移動。
version: "3"
services:
mysql:
image: mysql:5.7
container_name: mysql
environment:
MYSQL_ROOT_PASSWORD: mysql
volumes:
- C:\Users\mysql\sql:/docker-entrypoint-initdb.d
共有フォルダ設定されているフォルダの配下にSQLを格納しているフォルダを配置し、docker-composeを実行すると、MySQLコンテナの起動時にSQLが実行されるようになりました。
root@69b025475666:/docker-entrypoint-initdb.d# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.26 MySQL Community Server (GPL)
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sample01 |
| sys |
+--------------------+
5 rows in set (0.00 sec)
初期化SQLが実行されて、sample01データベースが作成されています。
めでたし。
Docker Toolbox、VirtualBoxを挟む影響か、結構苦労します。。。
VirtualBoxに詳しくないと、ちょっと大変かも、です。
(といっても、環境によっては使うしかないのですが。)
Dockerの基礎を学ぶ
Dockerってどんなことができるのか?と、Dockerの基礎機能を押さえるなら、この本がお勧めです。