今回はdocker-composeを使用してlaravelの開発環境を構築していた際にハマったことに関して記載しておこうと思います。それはMySQLの設定ファイルであるmy.cnfを編集していたときにハマってしまいました。
現状コンテナがないことを確認
$ docker-compose ps
MySQLの設定ファイルmy.cnfを設定
my.cnfの設定ファイルはこんな感じです。
先に申しておきますとこのmy.cnfファイルの設定ではエラーとなり、コンテナを作成できません。
理由としてはmy.cnfファイルの先頭にはオプションとして[mysqld]を記述しなければいけません。
とりあえず、docker-composeでコンテナを作成してみます。
$ docker-compose up -d
docker imageを確認
laravel-handson_dbと命名したMySQLのdocker imageが作成されています。
コンテナを確認
MySQLのservices名として設定したdbがexited (1)になっている(コンテナが起動していない)ことがわかります。
原因を調査
$ docker-compose logs
画像のようにエラーがでていることがわかります。このエラーの原因は先ほど紹介したようにMySQLの設定ファイルであるmy.cnfの先頭行に[mysqld]がないためです。
my.cnfの設定ファイルの先頭行に[mysqld]を記述
コンテナを再度作成する前に今のコンテナを削除しておきます。
$ docker-compose down
削除できたので、再度コンテナを作成します。
すると先ほどコンテナを作成した時と同じくdbのservicesが起動しておらず、エラーログも前回と同じ内容です。
これはmy.cnfファイルに記述した[mysqld]が反映されていないためです。
ではなぜ反映されていないか。それはDocker imageが更新されていなかったからです。
現在のDocker imageを確認
最初にコンテナを作成した際に作られたIMAGE IDのままです。
では最新のimageに更新したコンテナを作成します。答えは以下のコマンドでOKです。
$ docker-compose up --build -d
コンテナの起動確認
無事MySQLのservicesであるdbも起動していることが確認できました。
まとめ
$ docker-compose up -d
・コンテナがない状態でコマンドを実行するとDocker imageを作成し、それに伴うコンテナを起動する
・すでにコンテナがある状態でコマンドを実行すると既存のコンテナを起動するだけである
Dockerfileやそれに関わるファイルを更新・編集した際は再度ビルドを行うことを忘れないようにしましょう。
今回は以上です。
udemyオススメ動画講座
気になる方はまずはコースのプレビュー(無料)からみてみてください。
コメント