最近ミニPCを買いました。趣味で CPUをそこそこ使う処理を一日中動かしたいなぁという状況になったのですが VPS だと費用がバカにならないので自宅サーバーとして手頃なミニPCにしてみました。
TRIGKEY 製の安価な物で、CPUコアが8個もついてるのにこの大きさでこのお値段。消費電力も 5~40w 位と今の所はなかなかいい感じ(1ヶ月辺り千円くらい)。まだ触り初めて数日だけど。
届いて諸々の準備を済ませてウキウキと docker build (docker-compose build)を実行してみたところ、RUN npm ci
でハングしました。メインのPCや VPS 上だと問題なかったのに!
風呂に入りながら数分間放置してみると以下のようなエラーが出ていました。
ARG image=node:20-slim FROM ${image} AS dev USER root WORKDIR /common COPY ./common/ /common/ RUN npm ci RUN npx tsc # 以下省略
> [simulator dev 10/14] RUN npm ci: 360.1 npm ERR! code ETIMEDOUT 360.1 npm ERR! syscall read 360.1 npm ERR! errno -110 360.1 npm ERR! network read ETIMEDOUT 360.1 npm ERR! network This is a problem related to network connectivity. 360.1 npm ERR! network In most cases you are behind a proxy or have bad network settings. 360.1 npm ERR! network 360.1 npm ERR! network If you are behind a proxy, please make sure that the 360.1 npm ERR! network 'proxy' config is set properly. See: 'npm help config' 360.1 360.1 npm ERR! A complete log of this run can be found in: /root/.npm/_logs/2023-12-05T16_16_40_516Z-debug-0.log ------ failed to solve: process "/bin/sh -c npm ci" did not complete successfully: exit code: 146
解決
1. network=host にする(解決したと思ったら再発)
docker build --network=host .
のように RUN の実行を host ネットワークモードを使うように指定するとうまく行きました。docker-compose の場合は build の network を設定するだけ。
version: "3.8" services: app: build: dockerfile: Dockerfile context: . network: host
2. npm v10 以上(Node v20以上)の場合: v10.5.1 以上に上げる(解決🎉)
1 の解決策では一度は直ったのですが再発しました。GitHub 上に以下のような issue を見つけました。この issue によると npm install 時に大量のコネクションを確立してしまう結果、ネットワークの問題で停止するとのことでした。npm v10.5.1で解消されたらしいので最新までバージョンを上げることで解消しました。
$ npm install -g npm@latest
マイナーバージョンの変化ですがなにか理由があってバージョンアップしたくない場合は v9 以下に下げるのも有効みたいです。