nextjs公式のこちらを参考に、nextjsにdocker用のファイルなり設定を追加して、docker build -t nextjs-docker .
からのdocker run -p 3000:3000 nextjs-docker
をした。
で、localhost:3000にアクセスすると、真っ白で、ターミナルに以下のエラーが出た。
TypeError: handler is not a function at Server.<anonymous> (/app/server.js:19:11) at Server.emit (node:events:513:28) at parserOnIncoming (node:_http_server:980:12) at HTTPParser.parserOnHeadersComplete (node:_http_common:128:17)
日本語、英語でぐぐっても同様の症状の記事がなかったため、とりあえずプロジェクト内でhander
と記述してる部分をコメントアウトしてみたりしたけど変化なし。
上記リポジトリをcloneしてdocker build -t nextjs-docker .
とdocker run -p 3000:3000 nextjs-docker
をしたらエラーは出なかったので、cloneしたディレクトリに現行プロジェクトのファイルを少しずつコピーしてエラーの原因を特定してみた。
すると、なんと、原因のファイルは/public/favicons/site.webmanifestだった。
{ "name": "", "short_name": "", "icons": [ { "src": "/favicons/android-chrome-192x192.png", "sizes": "192x192", "type": "image/png" }, { "src": "/favicons/android-chrome-256x256.png", "sizes": "256x256", "type": "image/png" } ], "theme_color": "#ffffff", "background_color": "#ffffff", "display": "standalone" }
このwebmanifestファイルのnameが空だったために、エラーが出ていた模様。
nextjsもcloudrunも関係ないすごいしょーもないエラーに1.5日も詰まってしまって悔しい。