Docker初心者がWordPressをローカル移行しようとして盛り沢山のトラブルにぶち当たった話
今回は、Docker初心者の私がWordPressをローカル環境に移行しようとして遭遇したリアルなトラブルの記録です。
ほぼ自分用メモ+備忘録ですが、同じような状況に直面している方の参考になれば嬉しいです…!
目次
- 発生した主なトラブル
- 1. DB消失・再インポート時のポイント
- 2. wp_user_roles破損時の復旧方法
- 3. ログインできても”Sorry, you are not allowed to access this page”が出る場合
- 4. プラグインが原因でDeprecatedエラー&header already sentが発生する場合
- 最終確認ポイント
- まとめ
発生した主なトラブル
- ローカル移行後、403エラーやinstall.phpリダイレクトが発生
- wp_user_roles(user_roles)が破損、または消失
- populate_roles() も実行不可(Critical Error)
- DB再インポートによるロールとユーザー不一致
- ログイン可能だが”Sorry, you are not allowed to access this page”が発生
- Deprecatedエラーやheader already sentエラーで管理画面が表示不可
非常に複雑かつ難解なトラブルの連続でしたが、全て正しく対処することで無事ローカル環境のWordPress管理画面まで完全復旧しました(ほぼChatGPTのおかげ)。
1. DB消失・再インポート時のポイント
Dockerのvolumeを削除してしまった場合、DB(テーブル)が丸ごと消失するため、phpMyAdminから本番からエクスポートした.sqlファイルをインポートすることで復旧が可能。
注意ポイント
- インポート後は
wp_optionsテーブル内の「siteurl」と「home」をhttp://localhost:80XXに書き換える
これを忘れると本番にリダイレクトされたり、管理画面に入れなくなるため必須。
2. wp_user_roles破損時の復旧方法
パターンA: 破損しているが残っている場合
- 直接phpMyAdminからシリアライズ済みの正常なロールデータにUPDATEする
パターンB: 完全削除した場合
docker compose run --rm wpcli eval "populate_roles();"
docker compose run --rm wpcli user set-role 1 administrator
これでロールを再生成&ユーザーにadministratorロールを付与。
ただし注意
- populate_rolesはWordPress本体が正常ロードしていないとエラーになる(この場合はphpMyAdminから直接INSERTするのが確実)
3. ログインできても”Sorry, you are not allowed to access this page”が出る場合
これは、administratorロールがあるだけではダメで、read権限やedit_dashboard権限が不足している場合に起こる。
docker compose run --rm wpcli cap add administrator read
docker compose run --rm wpcli cap add administrator edit_dashboard
これでダッシュボードへのアクセス権限が復活する。
4. プラグインが原因でDeprecatedエラー&header already sentが発生する場合
All-in-One WP MigrationなどPHPバージョン非対応の古いプラグインが原因で管理画面が壊れるケース。
解決方法
docker compose run --rm wpcli plugin deactivate all-in-one-wp-migration
これでエラーが一掃され、管理画面が正常に表示されるようになります。
最終確認ポイント
- ロール(user_roles)が正常 → wp_optionsで確認
- ユーザーメタ(capabilities)が正常 → wp_usermetaで確認
- プラグインによる制限がない → wp-cliで全停止後に必要なものだけ有効化
- siteurl/homeがローカル環境向けになっている → wp_optionsで確認
この4点が揃えば、確実に管理画面は正常に動作する。
まとめ
今回のトラブルは、ロール破損 → populate_roles不可 → DB再インポート → プラグインエラーというローカル移行のトラブルフルコンボとも言えるものでしたが、適切に以下の対応をしたことで完全復旧が可能でした。
- DBの再インポートとsiteurl/homeの修正
- wp_user_rolesの正しい登録
- ユーザーへのロール再付与と権限付与
- プラグインの無効化と環境整備
おまけ
同様のトラブルを減らすためにも、ローカル環境のPHPバージョンとプラグインの互換性、DBバックアップ手順はあらかじめ準備しておくとスムーズに進められると思います!(そらそーだ)