web-dev-qa-db-ja.com

プロキシ下のdockerfile内をピップ

Elasticsearch-curatorのDockerイメージを構築しようとしています。

これがdockerfileです:

FROM Alpine:3.7

RUN adduser -S curator

RUN apk add --update \
    python \
    python-dev \
    py-pip \
    build-base \
  && pip install virtualenv \
  && pip install elasticsearch-curator \
  && rm -rf /var/cache/apk/*

USER curator

ENTRYPOINT [ "/usr/bin/curator"]

物事は私がプロキシの下にいるので、私は自分のイメージを次のように構築する必要があります:

docker build  --no-cache --build-arg HTTP_PROXY=http://xx.xx.xx.xx:xx -t elasticsearch-curator:5.4 .

しかし、virtualenvを取得したい場合は、次のようになります。

Collecting virtualenv
  Retrying (Retry(total=4, connect=None, read=None, redirect=None)) after connection broken by 'ConnectTimeoutError(<pip._vendor.requests.packages.urllib3.connection.VerifiedHTTPSConnection object at 0x7fb8259ed350>, 'Connection to pypi.python.org timed out. (connect timeout=15)')': /simple/virtualenv/
  Retrying (Retry(total=3, connect=None, read=None, redirect=None)) after connection broken by 'ConnectTimeoutError(<pip._vendor.requests.packages.urllib3.connection.VerifiedHTTPSConnection object at 0x7fb8259ed210>, 'Connection to pypi.python.org timed out. (connect timeout=15)')': /simple/virtualenv/

挿入する問題を解決している人を見つけました

ENV http_proxy http://proxy-chain.xxx.com:911/
ENV https_proxy http://proxy-chain.xxx.com:912/

私のプロキシは私の建物でのみ有効であるため、Dockerfileでそれを行うことはできません。別の場所の別の人がイメージをビルドする場合は、Dockerfileからhttp_proxy env varを削除する必要があります。

それを達成する他の方法はありますか?非常に一般的な使用例のようです...

13

コマンドラインにHTTPS_PROXYを追加して解決しました:

docker build  --no-cache --build-arg HTTP_PROXY=http://xx.xx.xx.xx:xx --build-arg HTTPS_PROXY=http://xx.xx.xx.xx:xx -t elasticsearch-curator:5.4 .
9

Dockerfileにプロキシ設定を含めないでください。

ホストマシンでプロキシ設定を正しく構成した場合、--network= Hostを使用してDockerイメージを構築できます。これにより、ビルドコマンドでホストのネットワーク設定が使用されます。

docker build  --no-cache --network=Host -t elasticsearch-curator:5.4 .
2
yamenk

これは、pipのインストールで明示的なプロキシ引数が必要になるためだと思います。

install.sh to pip installs。

プロキシが設定されている場合(build-arg、つまり環境を設定する)、次のようにインストールします:

pip install --proxy=https://user@mydomain:port virtualenv

環境変数で:

pip install --proxy=$HTTP_PROXY virtualenv

そうでない場合は、プロキシなしのpipインストール。

1
Alfonso Tienda

ホームまたはユーザーディレクトリのディレクトリにある〜\ .docker\config.jsonファイルを使用して、すべてのクライアントプロキシを設定できます。

{ 
  "credsStore": "wincred",
  "auths": {},
  "stackOrchestrator": "swarm",
  "proxies":
  {
   "default":
   {
    "httpProxy": "http://127.0.0.1:3001",
    "noProxy": "*.test.example.com,.example2.com"
   }
  }
}

最初の3つのエントリはデフォルトで存在します。 "proxies"セクションをファイルに追加するだけです。

ソース: https://docs.docker.com/network/proxy/

0
DanP