Memo:

アイデアや気づきとかが雑に書き殴られる

docker build の RUN npm ci が進まなくなり network read ETIMEDOUT が出た

ミニPC vs 埃ラズパイ
ミニPC vs 埃ラズパイ
最近ミニPCを買いました。趣味で CPUをそこそこ使う処理を一日中動かしたいなぁという状況になったのですが VPS だと費用がバカにならないので自宅サーバーとして手頃なミニPCにしてみました。

TRIGKEY 製の安価な物で、CPUコアが8個もついてるのにこの大きさでこのお値段。消費電力も 5~40w 位と今の所はなかなかいい感じ。まだ触り初めて数日だけど。

届いて諸々の準備を済ませてウキウキと 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

解決

docker build --network=host . のように RUN の実行を host ネットワークモードを使うように指定するとうまく行きました。docker-compose の場合は build の network を設定するだけ。

version: "3.8"

services:
    app:
        build:
            dockerfile: Dockerfile
            context: .
            network: host

参考