laradockを使ってmysqlのデータベースを作成しても、なぜか作成されない

laradockを使い始めることにしました。使い方はまた別記事で書きます。

その中で、微妙なハマり方をしたので、備忘として記事にしておきます。

現象

mysqlのデータベースを設定してdocker-compose up -d mysqlしても、データベースが作成されない。

まず手順はこう。

  • laradockをgit cloneする
  • env-sampleをコピーして.envを作成する
  • .envmysqlの設定をする(データベース名やユーザ名)
  • docker-compose up -d mysqlでコンテナを起動する

コンテナに入ってDB確認しても、.envで設定したデータベースが出来ていません。。。

docker-compose exec mysql bash

mysql -u root -p
password: # mysqlのrootパスワードを入力

mysql> show databases;

試行錯誤

  • mysqlコンテナの再作成(docker rmで削除して、docker-compose up -d mysql
  • mysqlコンテナのリビルド(`docker-compose up -d --build mysql
  • mysqlイメージの再作成(docker rmiでイメージ削除して、docker-compose up -d mysql
  • 環境の再構築(laradockをrm -rfして、git cloneからやり直し)

解決しませーん。

原因というか結論

1度試しに.envを変更する前にmysqlコンテナを起動しており、その時のデータベースが永続化されていて新しくデータベースが作成されなかった、でした。

mysqlコンテナのデータベースファイルはホスト側のボリュームをマウントしています。具体的には.envDATA_SAVE_PATH=/.laradock/dataってとこです。要するに、コンテナをいくら再作成しようが、1回作ったデータベースが永続化されていて再作成されません。

もちろん、この設定(仕様)は開発時にデータベースが初期化されない為に、絶対に必要なものなのですが、こちらのレベルが低すぎて認識できていませんでした。dockerのことも知らないと、ハマってしまう部分もあるんですね。

という、試行錯誤の中で同様にハマる人も1万人に1人はいるんじゃないかなぁ〜という事例でした。


PHPフレームワーク Laravel入門

新品価格
¥4,989から
(2018/3/26 17:09時点)