docker-compose.ymlでWordPressローカル開発環境を作った

こちらのDockerの公式サイトのQuickstartのdocker-compose.ymlでWordPressのローカル開発環境を作ろうと思ったのですが、そのまま使えず詰まったので記事にしてみました。

使用するDocker Image

  • WordPress
  • MySQL

公式サイトのQuickstartでは、上記の2つを使って環境構築をしています。

docker-compose.yml

version: ‘3.3’

 

services:
db:
image: mysql:5.7
volumes:
– db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress

 

wordpress:
depends_on:
– db
image: wordpress:latest
ports:
– “8000:80”
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress

 

volumes:
db_data:

Quickstart通りのdocker-compose.ymlで、

$ docker-comose up

してみると…

wordpress_1 |
wordpress_1 | Warning: mysqli::__construct(): (HY000/1045): Access denied for user ‘wordpress’@’172.19.0.3’ (using password: YES) in Standard input code on line 22
wordpress_1 |
wordpress_1 | MySQL Connection Error: (1045) Access denied for user ‘wordpress’@’172.19.0.3’ (using password: YES)

以前書いた記事のように、MySQLに接続できていないというエラー。

公式のチュートリアルそのまま丸コピでやってるのに動かないとはどういうことや。。

と、色々調べてみると、Dockerのコミュニティフォーラムで同じエラーに遭遇している人がいました。

Solved the mystery (for anyone else that runs into it)
The example file has a volume defined;
volumes:
– db_data:/var/lib/mysql
when you change that to something other than /var/lib/mysql it seems to work fine. I don’t understand enough yet to know why it does’t work with default path, but changing it to – db_data:/var/lib/mysql2 allows it to work fine.

なんかまだよくわかってないけど、デフォルトのパスじゃ動かなくて、
db_data:/var/lib/mysqldb_data:/var/lib/mysql2に変えたらうまくいったよ!

とのことで、実際にぼくもdocker-compose.ymlを修正して、再度

$ docker-compose up

すると、エラーもなく立ち上がり、localhost:8000にアクセスするとWordPressの初期画面が起動しました。

では、なぜdb_data:/var/lib/mysqlではうまくMySQLと接続できなかったのだろうというところなので、完璧には理解できませんでしたが、なんとなくこうじゃないのかなというのはつかめました。

そもそもdb_data:/var/lib/mysqlは、docker-compose.ymlのdbの中のvolumesというところにパスを設定しています。

このvolumesとは、ホストのディレクトリをコンテナ内のディレクトリにマウントできるという意味です。
じゃあマウントは何かというと、同期できる(間違いあったらすみません)ということです。

こうすることによって、コンテナが削除されても、データは消えずに永続的に保存できるということです。

WordPressで記事などのデータを挿入した際にそれを、コンテナを削除しても保存できるようにするために、この記述をします。

そこで話を戻しますが、ここでdb_data:/var/lib/mysql2db_data:/var/lib/mysqlに戻して、再度、docker-comopse up をしてみると、気になるWARNINGが出ました。

WARNING: Service “db” is using volume “/var/lib/mysql” from the previous container.
Remove the existing containers (with `docker-compose rm db`)

以前のコンテナでこのvolumeのパス使われてるよと言われました。

でここからがなんとなくこうじゃないのかなという部分なのですが、
以前、作成したMySQLのコンテナで同じvolumeのパスを使っていて、その情報がどこかで保持されていて、もうすでに違うデータの保存領域として使われてるよという意味なんじゃないかなーと推測しました。

ちなみにdb_data:/var/lib/mysql1とかdb_data:/var/lib/mysql3とか適当なのでもいけました。

ローカル開発環境を構築できたということで、実際に開発に入りたいためこれ以上は、深入りしないことにしようと思います。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です