問題
- ローカルで WordPress を Docker で構築した
- 使ったイメージは ここ のDocker Official
- ページに記載されている通り
-p 8080:80
のポート割り当てで起動
- この時点で初回の検証をする場合は特に問題は起きなかった
- 改めて起動して
http://localhost:8080
にアクセスすると、http://localhost
にリダイレクトされてアクセスできない - WordPressコンテナを落として次の日、WordPress 以外のアプリケーション開発で
http://localhost:8080
にアクセスするとhttp://localhost
の表示となり、8080
にアクセスできていないように見える- ただし、
/
以外 (http://localhost:8080/login
など ) にアクセスはできる
- ただし、
- curl などでは普通に
http://localhost:8080
へはアクセスできる
この問題の原因を探る。
調査結果
- WordPress の
home
およびsiteurl
はコンテナ内部のポートに依存した初期設定が行われるので、http://localhost
で初期データが作成される- どうも WordPress ではアクセスしてきたドメインと
wp_options.home
に登録されているドメインが違う場合、home
のドメインに 301リダイレクトが発生する……らしい。- なんでこんな機能があるんだろう…、リバプロとかすごく挟みづらそう…
- どうも WordPress ではアクセスしてきたドメインと
- そのため、この状態のWordPressが動作している状態で
http://localhost:8080
にアクセスすると、http://localhost
に 301 リダイレクトされる - そして ブラウザでは 301 リダイレクトもキャッシュする
- ので、キャッシュが残っている間は
http://localhost:8080
へのアクセスを行うと、一瞬でリダイレクトされるのでhttp://localhost:8080
に対してアクセスができないように見える
解決策
- ブラウザのキャッシュをクリアする
- WordPressが利用するDataBase の
home
およびsiteurl
をhttp://localhost:8080
に書き換える- ただし、WordPress 内部から home および siteurl を参照して自分自身にアクセスするような場合、
http://localhost:8080
はコンテナ内部で閉じているので動かない - サンプルには
-p 8080:80
と書いてあるが、もう複雑すぎるので-p 80:80
以外で動かさない方がいいんじゃないかな? - もしくは、そもそもローカルで構築せずにグローバルなFQDNを割り当ててそれで外中両方のアクセスを適切に解決できるようにすればよい
- ただし、WordPress 内部から home および siteurl を参照して自分自身にアクセスするような場合、
参考
というか同様のトラブルにハマった方の記事。
余談
WordPress、システムを管理する側から見るとものすごくハマりどころが多い印象でつらい。