本記事は Docker Toolbox を対象としています。Docker for Windows は対象外
Docker が build できない
webアプリ開発のためテストサーバを docker 上にビルドしようとしたら失敗した。
Step 10/11 : RUN cd app && yarn install
---> Running in d36ecd97329b
yarn install v1.22.4
[1/4] Resolving packages...
[2/4] Fetching packages...
error An unexpected error occurred: "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz: getaddrinfo EAI_AGAIN registry.yarnpkg.com".
以下が問題のファイル
FROM node:12.16-slim
ENV APP_DIR=/app
WORKDIR ${APP_DIR}
RUN mkdir -p ${APP_DIR}
COPY . ${APP_DIR}
ENV LANG=C.UTF-8
ENV TZ=Asia/Tokyo
ENV NODE_ENV=development
ENV HOST 0.0.0.0
RUN cd app && yarn install
EXPOSE 3000
環境
- Windows 10 Home 64bit
- Docker version 19.03.1
Windows 10 Home では Hyper-V が使用できないため DockerToolbox 経由でインストール
原因
registry.yarnpkg.com
の名前解決ができないのは直ぐに分かる。しかし何故?普通にコマンドラインから nslookup
できるぞ?と思ったら VirtualBox 側の DNS に問題があるようだ。Linux カーネルを用意するため OS とコンテナの間に挟まっており、意外と問題を見落としやすい。VirtualBox 上で叩くと、
dcoker@default:~$ nslookup registry.yarnpkg.com
Server: 10.0.2.3
Address 1: 10.0.2.3
nslookup: can't resolve 'registry.yarnpkg.com'
解決手法
手っ取り早く DNS サーバに8.8.8.8
をセカンダリーに追加する。
dcoker@default:~$ sudo -i
root@default:~# vi /etc/resolv.conf
DNS設定【resolv.conf 】再起動後の上書きを無効化する
nameserver 10.0.2.3
+ nameserver 8.8.8.8
8.8.8.8
は Google Public DNS のアドレスで、DNSで困った時の頼もしい味方。
キーボード配列の違いでコロン:
が打てず vi
終了できない!そんなJIS配列ユーザのあなたは'+' (Shift + ';')
を押下しましょう。
[Qiita] JISキーボードなのにUS配列の環境で文字を打つ
これは応急処置なので、VirtualBox を再起動すると元に戻るなど恒久的な解決にはならないので注意。