2016-06-29 19 views
1

ドッカーのビルド中にnpmに問題があります。私は企業のプロキシの背後にあり、同様の問題に対処する約30の記事(およびstackoverflow投稿)を読んでいます。しかし、私はまだこれを克服することができませんでした。node.jsアプリケーションのドッキング・イメージを作成すると、プロキシの後ろで失敗する

私はプロジェクトを "npm install"でき、ドッカーのビルドプロセスの外で(プロキシを使用して)必要なすべての依存関係をフェッチすることができます。

私がこれまで試してみました何

  1. (ハードコードされた認証データと一緒に)直接プロキシを使用してCNTLM以上も 。以下の説明は、CNTLMを使用する場合です。
  2. strict_sslをfalseにして、以下に示すようにhttpリポジトリを使用します。

npm config set strict-ssl=false \

npm config set registry=http://registry.npmjs.org/ \

  1. で始まる

  2. --build-argを、ENVとして、実行PARAMを介してプロキシ設定を渡しますクリーンなgit checkout(node_modulesなし)とnpmインストールを実行する の後

私が構築しようとしています

を持つ:

$ sudo docker build --build-arg HTTP_PROXY=http://127.0.0.1:3128 --build-arg HTTPS_PROXY=http://127.0.0.1:3128 . 

出力

Sending build context to Docker daemon 226.6 MB 
Step 1 : FROM node:argon 
---> c74c117ed521 
Step 2 : ENV http_proxy http://127.0.0.1:3128/ 
---> Using cache 
---> ad2e2df7429b 
Step 3 : ENV https_proxy http://127.0.0.1:3128/ 
---> Using cache 
---> 75fb2eb0bb22 
Step 4 : RUN mkdir -p /usr/src/app 
---> Using cache 
---> ee79de37d6d7 
Step 5 : WORKDIR /usr/src/app 
---> Using cache 
---> 404356f5def0 
Step 6 : COPY package.json /usr/src/app/ 
---> Using cache 
---> a2ec47267628 
Step 7 : RUN git config --global http.proxy http://127.0.0.1:3128/ 
---> Running in 3cd5db8b1371 
---> 7353cd94b67a 
Removing intermediate container 3cd5db8b1371 
Step 8 : RUN npm install 
---> Running in 79ed0eb809d8 
npm info it worked if it ends with ok 
npm info using [email protected] 
npm info using [email protected] 
npm info preinstall app 
npm info attempt registry request try #1 at 10:24:02 AM 
npm http request GET https://registry.npmjs.org/bufferutil 
npm info attempt registry request try #1 at 10:24:02 AM 
npm http request GET https://registry.npmjs.org/connect-mongo 
<snip> 

npm info retry will retry, error on last attempt: Error: tunneling socket could not be established, cause=connect ECONNREFUSED 127.0.0.1:3128 
npm info retry will retry, error on last attempt: Error: tunneling socket could not be established, cause=connect ECONNREFUSED 127.0.0.1:3128 
<snip> 

npm ERR! Linux 3.13.0-88-generic 
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "install" 
npm ERR! node v4.4.6 
npm ERR! npm v2.15.5 
npm ERR! code ECONNRESET 

npm ERR! network tunneling socket could not be established, cause=connect ECONNREFUSED 127.0.0.1:3128 
npm ERR! network This is most likely not a problem with npm itself 
npm ERR! network and is related to network connectivity. 
npm ERR! network In most cases you are behind a proxy or have bad network settings. 
npm ERR! network 
npm ERR! network If you are behind a proxy, please make sure that the 
npm ERR! network 'proxy' config is set properly. See: 'npm help config' 

npm ERR! Please include the following file with any support request: 
npm ERR!  /usr/src/app/npm-debug.log 

これは私のドッキングウィンドウスクリプト

FROM node:argon 

ENV http_proxy http://127.0.0.1:3128/ 
ENV https_proxy http://127.0.0.1:3128/ 

# Create app directory 
RUN mkdir -p /usr/src/app 
WORKDIR /usr/src/app 

# Install app dependencies 
COPY package.json /usr/src/app/ 

# setup proxies 
RUN git config --global http.proxy http://127.0.0.1:3128/ && \ 
    npm config set strict-ssl=false \ 
    npm config set registry=http://registry.npmjs.org/ \ 
    npm config set proxy=http://127.0.0.1:3128/ && \ 
    npm config set https-proxy=http://127.0.0.1:3128/ 

# Install dependencies for node.js 
RUN npm install 

# Bundle app source 
COPY . /usr/src/app 

EXPOSE 8080 
CMD [ "npm", "start" ] 

答えて

3

アプローチであります--build-argを使用することは正しいです.Dockerイメージを構築するときにプロキシ設定を使用し、Dockerファイル内にプロキシ設定を入れずに、特定の環境に結び付けられないようにします(ENVエントリは不要です)。

dockerビルドlocalhostの中でcntlmプロキシとして使用しようとしています。これはビルド時にビルドを実行しているドッカーコンテナを指しているため無効ですが、実際にはあなたのホストはドッカーネットワークでcntlmを提供しています。

この作業を行うために、いくつかのインターフェイスでリッスンするようにcntlmを構成し、ゲートウェイモードをアクティブにして他のマシンから使用できるようにすることができます。このようにして、イメージが構築されると、ドッカーインスタンスからホストに要求を送信します。

マイドッカブリッジネットワークは、(私のホストはdocker0172.17.0.1のアドレスとして取得します)、次のとおりです。

cntlm.conf
$ docker network inspect bridge 
... 
      "Config": [ 
      { 
       "Subnet": "172.17.0.0/16", 
       "Gateway": "172.17.0.1" 
      } 
... 

... 
Listen   127.0.0.1:3128 
Listen   172.17.0.1:3128 
... 
Gateway yes 
Allow   127.0.0.1/32 
Allow   172.17.0.0/16 
Deny   0/0 
... 

この設定では、cntlmは両方のローカルホストに耳を傾けますドッカー・ブリッジ・ネットワークは、ドッキング・コンテナからのリモート接続のみを許可します。 NPMであなたのイメージを構築するときに

あなたは、プロキシの設定を使用します。

$ docker build --build-arg=HTTP_PROXY=http://172.17.0.1:3128 --build-arg=HTTPS_PROXY=http://172.17.0.1:3128 . 

私はそれが役に立てば幸い、私は企業ネットワークにこのすべてを行うことは本当にピタパンであることを知っています!あなたのコンテナのための新しいネットワークを作成しますコンファイルを起動し、v2のフォーマットでドッキングウィンドウ・コンファイルを使用する場合

EDITは18 - 8月 - 2016年、私は今日発見

何かが、あります。つまり、新しい範囲からの接続を受け入れるようにcntlmファイルを変更する必要があります。

例として、私の作成ファイルの1つが172.19.0.0/16の下にネットワークを作成しましたが、私のcntlm設定は172.17.0.0/16からの接続しか許可していません。接続の問題が発生した場合は、syslogを調べて問題を特定してください。

https://docs.docker.com/compose/networking/

+0

ありがとうございます!それがトリックでした。 –

関連する問題