社内環境で RUN npm install -g @vue/cli
を記載した Dockerfile を使って docker-compose up -d
すると ECONNREFUSED と言われて実行できなかったので、その対策の備忘録です。
(なお、別件で network 問題も発生しましたが、これは こちら を参照して解決しました。別件となるのでここでは省略します。)
環境
- Windows 10 Pro にて Docker Desktop を使用
- 社内環境下のため、ネットワークはプロキシ配下
- docker の「Settings – Resources – PROXIS」にて、HTTP および HTTPS プロキシを設定済み
- OSの環境変数にも http_proxy および https_proxy を設定済み
症状
以下の Dockerfile と docker-compose.yml を使用しました。(前回の記事で使用したものです)
# Dockerfile
FROM node:12.4
RUN apt-get update
RUN npm install -g @vue/cli
RUN npm install -g @aws-amplify/cli
WORKDIR /AmplifyDemo
# docker-compose.yml
version: "3"
services:
amplify:
build: ./
ports:
- 8000:8000
- 8081:8080
stdin_open: true
volumes:
- ./dev/:/AmplifyDemo
- ./dev/aws/:/root/.aws/
tty: true
上記で docker-compose up -d
すると、以下のようになりました。
>docker-compose up -d
Building amplify
[+] Building 137.1s (7/9)
=> [internal] load build definition from Dockerfile 0.1s
=> => transferring dockerfile: 32B 0.0s
=> [internal] load .dockerignore 0.1s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/library/node:12.4 2.5s
=> [auth] library/node:pull token for registry-1.docker.io 0.0s
=> [1/5] FROM docker.io/library/node:12.4@sha256:ff37127378242accaa80c6c3426d02d3f749c7b220401f791eda5c954a60ed75 0.0s
=> CACHED [2/5] RUN apt-get update 0.0s
=> ERROR [3/5] RUN npm install -g @vue/cli 134.3s
------
> [3/5] RUN npm install -g @vue/cli:
#7 134.2 npm ERR! code ECONNREFUSED
#7 134.2 npm ERR! errno ECONNREFUSED
#7 134.2 npm ERR! FetchError: request to https://registry.npmjs.org/@vue%2fcli failed, reason: connect ECONNREFUSED 104.16.27.35:443
#7 134.2 npm ERR! at ClientRequest.<anonymous> (/usr/local/lib/node_modules/npm/node_modules/node-fetch-npm/src/index.js:68:14)
#7 134.2 npm ERR! at ClientRequest.emit (events.js:200:13)
#7 134.2 npm ERR! at TLSSocket.socketErrorListener (_http_client.js:402:9)
#7 134.2 npm ERR! at TLSSocket.emit (events.js:200:13)
#7 134.3 npm ERR! at emitErrorNT (internal/streams/destroy.js:91:8)
#7 134.3 npm ERR! at emitErrorAndCloseNT (internal/streams/destroy.js:59:3)
#7 134.3 npm ERR! at processTicksAndRejections (internal/process/task_queues.js:84:9)
#7 134.3 npm ERR! FetchError: request to https://registry.npmjs.org/@vue%2fcli failed, reason: connect ECONNREFUSED 104.16.27.35:443
#7 134.3 npm ERR! at ClientRequest.<anonymous> (/usr/local/lib/node_modules/npm/node_modules/node-fetch-npm/src/index.js:68:14)
#7 134.3 npm ERR! at ClientRequest.emit (events.js:200:13)
#7 134.3 npm ERR! at TLSSocket.socketErrorListener (_http_client.js:402:9)
#7 134.3 npm ERR! at TLSSocket.emit (events.js:200:13)
#7 134.3 npm ERR! at emitErrorNT (internal/streams/destroy.js:91:8)
#7 134.3 npm ERR! at emitErrorAndCloseNT (internal/streams/destroy.js:59:3)
#7 134.3 npm ERR! at processTicksAndRejections (internal/process/task_queues.js:84:9) {
#7 134.3 npm ERR! message: 'request to https://registry.npmjs.org/@vue%2fcli ' +
#7 134.3 npm ERR! 'failed, reason: connect ECONNREFUSED ' +
#7 134.3 npm ERR! '104.16.27.35:443',
#7 134.3 npm ERR! type: 'system',
#7 134.3 npm ERR! errno: 'ECONNREFUSED',
#7 134.3 npm ERR! code: 'ECONNREFUSED',
#7 134.3 npm ERR! stack: 'FetchError: request to https://registry.npmjs.org/@vue%2fcli failed, ' +
#7 134.3 npm ERR! 'reason: connect ECONNREFUSED 104.16.27.35:443\n at ' +
#7 134.3 npm ERR! 'ClientRequest.<anonymous> ' +
#7 134.3 npm ERR! '(/usr/local/lib/node_modules/npm/node_modules/node-fetch-npm/src/index.js:68:14)\n' +
#7 134.3 npm ERR! ' at ClientRequest.emit (events.js:200:13)\n at ' +
#7 134.3 npm ERR! 'TLSSocket.socketErrorListener (_http_client.js:402:9)\n at ' +
#7 134.3 npm ERR! 'TLSSocket.emit (events.js:200:13)\n at emitErrorNT ' +
#7 134.3 npm ERR! '(internal/streams/destroy.js:91:8)\n at emitErrorAndCloseNT ' +
#7 134.3 npm ERR! '(internal/streams/destroy.js:59:3)\n at processTicksAndRejections ' +
#7 134.3 npm ERR! '(internal/process/task_queues.js:84:9)'
#7 134.3 npm ERR! }
#7 134.3 npm ERR!
解決方法
以下の3点を実施すると解決しました。
1.Dockerfile に npm のプロキシ設定を明記する
# Dockerfile
FROM node:12.4
RUN apt-get update
RUN npm config set proxy http://xxxxxxxxx:8080 # ←追加
RUN npm config set https-proxy http://xxxxxxxxx:8080 # ←追加
RUN npm install -g @vue/cli
RUN npm install -g @aws-amplify/cli
WORKDIR /AmplifyDemo
↓参考にさせて頂きました。
https://qiita.com/tenten0213/items/7ca15ce8b54acc3b5719
2.docker-compose.yml にもプロキシ設定を明記
これは意外な罠です。
首題の件とは直接は関係ないですが、コンテナ内で amplify init
等するときにプロキシ環境下だと設定しておかないと ECONNREFUSED
になります。
気を付けないといけないのは、HTTP_PROXY
は大文字である必要があります。
この罠に4時間以上嵌りました・・・
# docker-compose.yml
version: "3"
services:
amplify:
build: ./
ports:
- 8000:8000
- 8081:8080
environment:
- HTTP_PROXY=http://xxxxxxxxx:8080 # ←これ追加
- HTTPS_PROXY=http://xxxxxxxxx:8080 # ←これ追加
stdin_open: true
volumes:
- ./dev/:/AmplifyDemo
- ./dev/aws/:/root/.aws/
tty: true
↓参考にさせて頂きました。
https://twitter.com/wadahiro/status/1303526058155622400
3.Docker Desktop の Docker Engine 設定を変更
Docker Engine の設定の insecure-registries
に docker.io
を追加します。
↓参考にさせて頂きました。
https://cream-worker.blog.jp/archives/1079086929.html
コメント