Macのdocker上で npm install すると固まったり、エラーで失敗する
解決するのに1日溶かしてしまったので備忘録。
解決策
npmのバージョンが 10.5.0
の場合 10.5.1
以上にバージョンアップする
です。
npm installがうまく行かない
Macで docker build
を実行した際に、Dockerfile
の中で指定した RUN npm install
で処理が固まってしまうことが起きていました。
dockerdが固まる?
ビルドが固まった状態になってしまうと、qemu-system-aarch64
というプロセスのCPU使用率が100%に張り付いてしまい、他の docker ps
などのコマンドも実行できなくなっていました。こうなると dockerd
を再起動しないといけないらしく、Rancher Desktopを再起動する必要がありました。
ネットワークのエラーになる
また辛抱強く待ってみても、以下のようなエラーが起きるようになっていました。
=> ERROR [4/4] RUN npm install 350.1s
------
> [4/4] RUN npm install:
271.2 npm WARN deprecated [email protected]: Use your platform's native DOMException instead
345.0 npm ERR! code ETIMEDOUT
345.0 npm ERR! syscall read
345.0 npm ERR! errno -110
345.0 npm ERR! network read ETIMEDOUT
345.0 npm ERR! network This is a problem related to network connectivity.
345.0 npm ERR! network In most cases you are behind a proxy or have bad network settings.
345.0 npm ERR! network
345.0 npm ERR! network If you are behind a proxy, please make sure that the
345.0 npm ERR! network 'proxy' config is set properly. See: 'npm help config'
345.5
345.5 npm ERR! A complete log of this run can be found in: /root/.npm/_logs/2024-04-24T07_42_03_445Z-debug-0.log
------
Dockerfile:20
--------------------
18 |
19 | # RUN echo "progress = false" >> /app/.npmrc
20 | >>> RUN npm install
21 |
22 | # RUN npm run build
--------------------
ERROR: failed to solve: process "/bin/sh -c npm install" did not complete successfully: exit code: 146
エラーメッセージの通りだと何かネットワークの問題があるようなので、dockerの方に何か原因があるのだろうと調べていましたが、解決の糸口になることはありませんでした。
少数のパッケージだと上手く行く
やりたかったことはReactのアプリをビルドしたかったのですが、試しに1つだけパッケージをインストールするような package.json
を使用したところ問題ありませんでした。
エラーメッセージでググって解決
npm install
の方に問題があるのかもと思い、エラーメッセージで検索したところ、以下のページを発見しました。
Node.js v20のnpm ciが進まなくなりnetwork read ETIMEDOUT が出た - Buri Memo:
GitHub 上に以下のような issue を見つけました。この issue によると npm install 時に大量のコネクションを確立してしまう結果、ネットワークの問題で停止するとのことでした。npm v10.5.1で解消されたらしいので最新までバージョンを上げることで解消しました。
問題となっていたissue はこちら。
[BUG] Npm opens many connections when installing
まさにこれでは!!!と思って試したところ問題なくビルドできるようになりました。
RUN npm install -g npm@latest
RUN npm install
これで問題ありませんでした。
教訓
ビルドなどでうまく行かない、しかもネットワークに問題がある、という時は大抵環境の問題かなと思ってしまうのですが、ツールにも問題があることがあるんだなと。
今まであまりパッケージマネージャーの細かいバージョンを気にしたことが無かったので、そこも注意してみようと思いました。