web-dev-qa-db-fra.com

Pip dans dockerfile sous proxy

J'essaie de construire une image Docker pour elasticsearch-conservateur, 

Voici le fichier docker:

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"]

La chose est que je suis sous un proxy, je dois donc construire mon image avec:

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

Mais quand il veut devenir virtuel, je reçois:

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/

J'ai trouvé des gens qui résolvaient un problème en insérant 

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

dans le fichier Dockerfile, mais ce n’est pas possible pour moi, car mon proxy n’est valable que sur mon bâtiment. Par conséquent, si une autre personne d’un autre endroit souhaite créer l’image, il devra supprimer http_proxy env var de Dockerfile.

Y a-t-il un autre moyen d'y parvenir? Cela semble être un cas d'utilisation très courant ...

6
Juliatzin del Toro

Je l'ai résolu en ajoutant HTTPS_PROXY en ligne de commande:

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
Juliatzin del Toro

N'incluez pas les paramètres de proxy dans le fichier Docker.

Si vous avez correctement configuré les paramètres de proxy sur la machine hôte, vous pouvez créer l'image du menu fixe avec --network= Host. Cela fera que la commande de construction utilise les paramètres réseau de l'hôte.

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

Je pense que cela est dû au fait que pip install nécessite un argument de proxy explicite. 

Essayez de créer un install.sh pour installer les installations. 

Si un proxy est configuré (transmis sous la forme build-arg, c'est-à-dire défini dans l'environnement), installez-le avec:

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

Avec variable env:

pip install --proxy=$HTTP_PROXY virtualenv

Sinon, pip installer sans proxy.

1
Alfonso Tienda

Vous pouvez configurer tous les mandataires des clients via le fichier ~\.docker\config.json de votre répertoire de base ou répertoire utilisateur:

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

Les trois premières entrées sont là par défaut, ajoutez simplement la section "proxies" à votre fichier.

Source: https://docs.docker.com/network/proxy/

0
DanP