7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Docker で立てた WordPress を検証した後からブラウザで特定ポートへのアクセスができなくなる

Posted at

問題

  • ローカルで 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が動作している状態で http://localhost:8080 にアクセスすると、 http://localhost に 301 リダイレクトされる
  • そして ブラウザでは 301 リダイレクトもキャッシュする
  • ので、キャッシュが残っている間は http://localhost:8080 へのアクセスを行うと、一瞬でリダイレクトされるので http://localhost:8080 に対してアクセスができないように見える

解決策

  • ブラウザのキャッシュをクリアする
  • WordPressが利用するDataBase の home および siteurlhttp://localhost:8080 に書き換える
    • ただし、WordPress 内部から home および siteurl を参照して自分自身にアクセスするような場合、http://localhost:8080 はコンテナ内部で閉じているので動かない
    • サンプルには -p 8080:80 と書いてあるが、もう複雑すぎるので -p 80:80 以外で動かさない方がいいんじゃないかな?
    • もしくは、そもそもローカルで構築せずにグローバルなFQDNを割り当ててそれで外中両方のアクセスを適切に解決できるようにすればよい

参考

というか同様のトラブルにハマった方の記事。

余談

WordPress、システムを管理する側から見るとものすごくハマりどころが多い印象でつらい。

7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?