WSL2 上で docker build
したときに、npm install
が EAI_AGAIN
で失敗することがある。
Sending build context to Docker daemon 16.38kB
Step 1/7 : FROM node:18.9.0-alpine3.15
---> ec9347a9b50f
Step 2/7 : WORKDIR /app
---> Using cache
---> 4f9b5895a691
Step 3/7 : COPY package.json ./
---> 2976c381a263
Step 4/7 : RUN npm i -g npm@9.1.1 && npm i
---> Running in be3cca06d4f5
npm ERR! code EAI_AGAIN
npm ERR! syscall getaddrinfo
npm ERR! errno EAI_AGAIN
npm ERR! request to https://registry.npmjs.org/npm failed, reason: getaddrinfo EAI_AGAIN registry.npmjs.org
npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2023-02-16T00_38_46_463Z-debug-0.log
The command '/bin/sh -c npm i -g npm@9.1.1 && npm i' returned a non-zero code: 1
きっかけはよくわからないが、Windows アップデートで PC 再起動された翌日から発生するようになった。
Windows アップデートそのものは関係ないが、おそらくWSL再起動、Docker デーモン再起動が行われたことに起因しているものと考えられる。
原因と解決策
なにやら Docker が DNS 解決できないゆえに発生しているらしい。そのため、docker build 時に --network==
オプションを付けることで回避できた。
利用可能なネットワーク確認
docker network ls
NETWORK ID NAME DRIVER SCOPE
ea8f55babc5d bridge bridge local
6dbe0f879255 host host local
4b0be39c3e3a none null local
networkオプションを指定してビルド
docker build --network=host . --tag app:v1
参考