docker-composeでファイルがコピーされない場合

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
コンテナに入ってls

ローカルにあった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が実行されるようになりました。

コンテナに入ってls
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の基礎機能を押さえるなら、この本がお勧めです。