WindowsのDockerでMySQLが起動しない
弊社では開発環境にDockerを使用する場合が多いですが、その際に発生したトラブルについて記載したいと思います。
経緯
docker上で MySQL(8.0.28) を使用した開発を行っていた時、設定ファイルを書き換える必要がありました。
Webサーバとして使用しているnginxは設定ファイルをマウントして使用していたため、MySQLも同様に設定ファイルをマウントする形式を採用し、Gitでコミットをしました。
しかし、そのコミットを引き取ってきた別の社員から「MySQL が起動しない」という連絡を受け、調査した結果、下記のようなエラーが出ていました。
1 2 3 |
mysqld: [Warning] World-writable config file '/etc/mysql/my.cnf' is ignored. |
調べてみると、MySQL の設定ファイル my.cnf は、Windows 環境での権限も見ているようなことが書いてありました。
そのため、対策を2つ考えましたが、弊社では2つ目の方法を採用することにしました(理由は後述)。
[対策: その1] 設定ファイルのWindows権限を変更する
Windows 環境での権限を正しく設定することで、MySQLの起動を阻害しないようにできます。
やり方は簡単で my.cnf を右クリックし、「プロパティ」を選択。
「読み取り専用」のチェックボックスにチェックを入れてOKを押せば完了です。
しかし、これではGit環境を利用している全員がこの作業を行う必要が出てきてしまいます。
また、後からプロジェクトに加わった人もこの行程を踏む必要があるため、多人数での開発ではこの方法は取れません。
[対策: その2] 設定ファイルをコンテナに入れる
コンテナ生成時に設定ファイルをコンテナに入れてしまえば、権限に関する問題は解決します。
具体的にはこんな感じです。
1 2 3 4 |
# Copy MySQL config file ADD my.cnf /etc/mysql/my.cnf |
Dockerfile に設定ファイルを追加するコマンドを書いて実行すれば完了です。
この方法では「設定を書き換えるためにコンテナを作り直す必要がある」という問題がありますが、MySQL のデータを永続化させておけば、コンテナを再生成しても問題はありません。
また、高頻度で設定を変えることも少ないため、こちらの方法を採用しました。
さいごに
弊社環境ではこの方法で対策することができましたが、環境次第ではこれで治らない場合もあるかもしれません。
それでも同じようなエラーで悩んでいる方が、この記事で対応できれば良いなと思っています。
POPULAR
-
のえる2021.11.02
-
Windows10, 11でタッチパッドを無効化できない方に試して欲しいこと
もきち2020.01.30
のえる
Full-stack Developer