Wordpressの開発環境をDockerで作ろうとしたところ、「Error establishing a database connection」というエラーメッセージが表示されてしまいました。少し詰まったので備忘録として書いておきます。
原因1:dockerのvolumeが残ってしまっていた。
解決策:docker volume prune
で未使用のvolumeを削除する。
docker-compose.ymlに下記のように記載していました。
...
db:
image: mysql:5.7
restart: always
environment:
MYSQL_DATABASE: db
MYSQL_USER: user
MYSQL_PASSWORD: pass
volumes:
- db:/var/lib/mysql
volumes:
wordpress:
db:
このymlファイルで一度コンテナを起動後、ユーザー名やパスワードを変更して作業をしていたので、dbコンテナに入ってからmysqlに接続しようとしても「パスワードが違います」というメッセージが表示されてしまい、接続ができませんでした。
ymlファイルを見直し、「これ、volumeが残っているから修正した情報が反映されてないのでは...?」と気づき、docker volume prune
で古いvolumeを削除。再度コンテナを起動したところ、修正後の情報でmysqlへ接続できました。
原因2:wp-config.phpのDB_HOSTはDBコンテナ名
解決策:wp-config.phpのDB_HOSTをDBコンテナ名に変更する。
修正前
/** MySQL のホスト名 */
define('DB_HOST', 'localhost');
↓
修正後
/** MySQL のホスト名 */
define('DB_HOST', 'db'); // ymlに記載したDBコンテナ名
wordpressの設定ファイルは、ルートディレクトリにwp-config-sample.phpがあるので、これをwp-config.phpとしてコピーを行い、使用します。この中にDBの接続情報が記載されているのですが、このDB_HOSTの値をdockerで作成するDBのコンテナ名に設定したところ、無事にWordpressの画面が表示されました。
最後に
URLに`http://localhost:8080/wp-admin/`で接続すると、上記のような画面が表示されました。ここに表示されている「Are you sure you have typed the correct hostname?」を見て、原因2を疑うことができました。それでは!
参考情報:
・未使用のコンテナ、volumeなどを一括削除
https://qiita.com/reflet/items/5caa88abcf1e8964783a
・Docker: 使っていないボリュームを削除してディスク使用量を節約する
https://hoge-hogeo-777.hatenablog.com/entry/2019/03/01/183000