発生した問題
アプリの動作には問題ないが、エディタなどでエラーが起きるためホスト側にnode_modules
を読み込ませる(作成する)必要があるため、作成しようとしたら下記の問題に遭遇した。
-
DockerでNext.jsの環境を構築する際に、
npm install
をすると作成されるnode_modules
が空ディレクトリでホスト側に作成される -
(上記と同じため省略)
node_modules
がホスト側に作成されない -
バインドマウントや名前付きボリュームマウントだと、ホスト側(またはコンテナ側)で
node_modules
が上書きされてしまい正常に動作しない
問題の解決方法
- コンテナ起動時に
npm install
を実行
すなわち、DockerfileのCMD
やdocker-compose.ymlのcommand
でnpm install
をすることで解決した。
ですがこの解決方法では、再現性やビルド時間を考慮してイメージビルド時、つまりイメージ内で依存関係のインストールを完了したいという要件では、上記の対応策は意味をなさないでしょう。
ですので私は、ローカル開発環境ではコンテナ起動時に、本番環境ではイメージビルド時にnpm install
するように対応しました。