web-dev-qa-db-fra.com

Impossible de télécharger des images Docker derrière un proxy

J'ai installé Docker sur mon Ubuntu 13.10 (Saucy Salamander) et lorsque je tape dans ma console:

Sudo docker pull busybox

Je reçois l'erreur suivante:

Pulling repository busybox
2014/04/16 09:37:07 Get https://index.docker.io/v1/repositories/busybox/images: dial tcp: lookup index.docker.io on 127.0.1.1:53: no answer from server

Version Docker:

$ Sudo docker version

Client version: 0.10.0
Client API version: 1.10
Go version (client): go1.2.1
Git commit (client): dc9c28f
Server version: 0.10.0
Server API version: 1.10
Git commit (server): dc9c28f
Go version (server): go1.2.1
Last stable version: 0.10.0

Je suis derrière un serveur proxy sans authentification et voici mon fichier /etc/apt/apt.conf:

Acquire::http::proxy "http://192.168.1.1:3128/";
Acquire::https::proxy "https://192.168.1.1:3128/";
Acquire::ftp::proxy "ftp://192.168.1.1:3128/";
Acquire::socks::proxy "socks://192.168.1.1:3128/";

Qu'est-ce que je fais mal?

240
rpayanm

Voici un lien vers la documentation officielle de Docker sur le proxy HTTP: https://docs.docker.com/config/daemon/systemd/#httphttps-proxy

Un aperçu rapide:

Commencez par créer un répertoire système Systemd pour le service Docker:

mkdir /etc/systemd/system/docker.service.d

Créez maintenant un fichier appelé /etc/systemd/system/docker.service.d/http-proxy.conf qui ajoute la variable d’environnement HTTP_PROXY:

[Service]
Environment="HTTP_PROXY=http://proxy.example.com:80/"

Si vous avez des registres Docker internes que vous devez contacter sans proxy, vous pouvez les spécifier via la variable d'environnement NO_PROXY:

Environment="HTTP_PROXY=http://proxy.example.com:80/"
Environment="NO_PROXY=localhost,127.0.0.0/8,docker-registry.somecorporation.com"

Flush change:

$ Sudo systemctl daemon-reload

Vérifiez que la configuration a été chargée:

$ Sudo systemctl show --property Environment docker
Environment=HTTP_PROXY=http://proxy.example.com:80/

Redémarrer Docker:

$ Sudo systemctl restart docker
603
Alexandre Mélard

Vos paramètres de proxy APT ne sont pas liés à Docker.

Docker utilise la variable d’environnement HTTP_PROXY si elle est présente, par exemple:

Sudo HTTP_PROXY=http://192.168.1.1:3128/ docker pull busybox

Mais au lieu de cela, je vous suggère de consulter votre fichier de configuration /etc/default/docker: vous devriez avoir une ligne pour commenter (et éventuellement ajuster) pour que vos paramètres de proxy soient appliqués automatiquement. Puis redémarrez le serveur Docker: 

service docker restart
87
mbarthelemy

Sur CentOS, le fichier de configuration de Docker est:

/etc/sysconfig/docker

L'ajout de la ligne ci-dessous m'a aidé à faire fonctionner le démon Docker derrière un serveur proxy:

HTTP_PROXY="http://<proxy_Host>:<proxy_port>"
HTTPS_PROXY="http://<proxy_Host>:<proxy_port>"
52
Arun Y

Sous Ubuntu, vous devez définir http_proxy pour le démon Docker, et non le processus client. Ceci est fait dans /etc/default/docker (voir ici ).

32
gkephorus

Si vous utilisez le nouveau Docker pour Mac (ou Docker pour Windows ), cliquez avec le bouton droit de la souris sur l’icône de la barre des tâches et sélectionnez Préférences (Windows: Paramètres), puis sélectionnez Avancé , et sous Proxies, spécifiez vos paramètres de proxy ici. Cliquez sur Appliquer et redémarrer et attendez le redémarrage de Docker.

29
Pedro Madrid

Pour étendre la réponse d'Arun ci-dessus, pour que cela fonctionne dans CentOS 7, j'ai dû supprimer les commandes "export". Donc éditer

/etc/sysconfig/docker

Et ajouter:

HTTP_PROXY="http://<proxy_Host>:<proxy_port>"
HTTPS_PROXY="https://<proxy_Host>:<proxy_port>"
http_proxy="${HTTP_PROXY}"
https_proxy="${HTTPS_PROXY}"

Puis redémarrez Docker:

Sudo service docker restart

La source est cet article de blog .

24
zummed

Pourquoi un proxy lié localement ne fonctionne pas

Le problème

Si vous exécutez un proxy lié localement, par exemple. en écoutant sur 127.0.0.1:8989, ça ne marchera pas dans Docker pour Mac. À partir de documentation Docker :

Je souhaite me connecter depuis un conteneur à un service sur l'hôte

Le Mac a une adresse IP changeante (ou aucune si vous n’avez pas accès au réseau). Notre recommandation actuelle est d’attacher une adresse IP non utilisée à l’interface lo0 du Mac; Par exemple: Sudo ifconfig lo0 alias 10.200.10.1/24, et assurez-vous que votre service écoute sur cette adresse ou 0.0.0.0 (c.-à-d. pas 127.0.0.1). Ensuite, les conteneurs peuvent se connecter à cette adresse.

Le même est pour le côté serveur Docker. (Pour comprendre le côté serveur et le côté client de Docker, essayez d'exécuter docker version.) Et le côté serveur s'exécute sur une couche de virtualisation qui possède sa propre localhost. Par conséquent, il ne se connectera pas au serveur proxy sur la localhost du système d'exploitation hôte.

La solution

Donc, si vous utilisez un proxy local comme moi, vous devrez essentiellement procéder comme suit pour que cela fonctionne avec Docker pour Mac:

  1. Faites en sorte que votre serveur proxy écoute 0.0.0.0 au lieu de 127.0.0.1. Attention: vous aurez besoin d'une configuration de pare-feu appropriée pour empêcher tout accès malveillant à celui-ci.

  2. Ajoutez un alias de bouclage à l'interface lo0, par exemple. 10.200.10.1/24:

    Sudo ifconfig lo0 alias 10.200.10.1/24
    
  3. Définissez le proxy HTTP et/ou HTTPS sur 10.200.10.1:8989 à partir de Préférences dans le menu de la barre des tâches Docker (supposons que le serveur proxy écoute sur le port 8989).

Après cela, testez les paramètres du proxy en exécutant une commande dans un nouveau conteneur à partir d'une image non téléchargée:

$ docker rmi -f hello-world
  ...

$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world

c04b14da8d14: Pull complete 
Digest: sha256:0256e8a36e2070f7bf2d0b0763dbabdd67798512411de4cdcf9431a1feb60fd9
Status: Downloaded newer image for hello-world:latest
  ...

Remarque: l'alias de bouclage défini par ifconfig ne conserve pas après un redémarrage. Le rendre persistant est un autre sujet. S'il vous plaît vérifier cet article de blog en japonais (Google Translate peut aider).

11
Rockallite

C'est le correctif qui a fonctionné pour moi: Ubuntu, version Docker: 1.6.2

Dans le fichier /etc/default/docker, ajoutez la ligne:

export http_proxy='http://<Host>:<port>'

Redémarrer Docker

Sudo service docker restart
9
n3o

Pour que Docker fonctionne avec un proxy, vous devez ajouter la variable d’environnement HTTPS_PROXY/HTTP_PROXY au fichier sockconfig de Docker (/etc/sysconfig/docker).

Selon que vous utilisiez init.d ou l’outil de services, vous devez ajouter l’instruction "export" (en raison de Journaux du rapport de bogue Debian - # 767441. Les exemples dans/etc/default/docker sont trompeurs quant à la syntaxe prise en charge):

HTTPS_PROXY="https://<user>:<password>@<proxy-Host>:<proxy-port>"
HTTP_PROXY="https://<user>:<password>@<proxy-Host>:<proxy-port>"
export HTTP_PROXY="https://<user>:<password>@<proxy-Host>:<proxy-port>"
export HTTPS_PROXY="https://<user>:<password>@<proxy-Host>:<proxy-port>"

Le référentiel Docker (Docker Hub) ne prend en charge que HTTPS. Pour que Docker fonctionne avec les mandataires d'interception SSL, vous devez ajouter le certificat racine du proxy au magasin de données de confiance des systèmes.

Pour CentOS, copiez le fichier dans /etc/pki/ca-trust/source/anchors/, mettez à jour le magasin de données de confiance de l'autorité de certification, puis redémarrez le service Docker.

Si votre proxy utilise l'authentification NTLMv2, vous devez utiliser des proxys intermédiaires tels que Cntlm pour relier l'authentification. Ce billet de blog explique en détail .

6
Marcel Friedmann

Après avoir installé Docker, procédez comme suit:

[mdesales@pppdc9prd1vq ~]$ Sudo HTTP_PROXY=http://proxy02.ie.xyz.net:80 ./docker -d &
[2] 20880

Ensuite, vous pouvez tirer ou faire n'importe quoi:

mdesales@pppdc9prd1vq ~]$ Sudo docker pull base
2014/04/11 00:46:02 POST /v1.10/images/create?fromImage=base&tag=
[/var/lib/docker|aa088847] +job pull(base, )
Pulling repository base
b750fe79269d: Download complete
27cf78414709: Download complete
[/var/lib/docker|aa088847] -job pull(base, ) = OK (0)
4
Marcello de Sales

Dans la nouvelle version de Docker, docker-engine, dans une distribution basée sur systemd, vous devez ajouter la ligne de variable d'environnement à /lib/systemd/system/docker.service, comme le mentionnent d’autres:

Environment="HTTP_PROXY=http://hostname_or_ip:port/"
3
Mehdi Hamidi

Pour résoudre le problème de curl dans la construction de Docker, j'ai ajouté ce qui suit à l'intérieur du fichier Docker:

ENV http_proxy=http://infoprx2:8080
ENV https_proxy=http://infoprx2:8080
RUN apt-get update && apt-get install -y curl vim

Notez que l'instruction ENV est BEFORE l'instruction RUN.

Et afin de rendre le démon Docker capable d'accéder à Internet (j'utilise Kitematic avec boot2docker), j'ai ajouté ce qui suit dans /var/lib/boot2docker/profile:

export HTTP_PROXY=http://infoprx2:8080
export HTTPS_PROXY=http://infoprx2:8080

Ensuite, j'ai redémarré Docker avec Sudo /etc/init.d/docker restart.

3
Bruno Negrão Zica

Le simple fait de définir des variables d’environnement proxy ne m’aide pas dans la version 1.0.1 ... Je devais mettre à jour le fichier /etc/default/docker.io avec la valeur correcte pour la variable "http_proxy".

2
Richil

Si vous utilisez le proxy socks5, voici mon test avec Docker 17.03.1-ce avec le paramètre "all_proxy", et cela a fonctionné:

# Set up socks5 proxy server
ssh sshUser@proxyServer -C -N -g -D \
     proxyServerIp:9999 \
     -o ExitOnForwardFailure=yes \
     -o ServerAliveInterval=60

# Configure dockerd and restart.
# NOTICE: using "all_proxy"
mkdir -p /etc/systemd/system/docker.service.d
cat > /etc/systemd/system/docker.service.d/http-proxy.conf <<EOF
[Service]
Environment="all_proxy=socks5://proxyServerIp:9999"
Environment="NO_PROXY=localhost,127.0.0.1,private.docker.registry.com"
EOF

systemctl daemon-reload
systemctl restart docker

# Test whether can pull images
docker run -it --rm Alpine:3.5
2
btpka3

Si vous êtes dans Ubuntu, exécutez ces commandes pour ajouter votre proxy.

Sudo nano /etc/default/docker

Et décommentez les lignes qui spécifient

#export http_proxy = http://username:[email protected]:8050

Et remplacez-le par votre serveur proxy et votre nom d'utilisateur appropriés.

Puis redémarrez Docker en utilisant:

service docker restart

Vous pouvez maintenant exécuter les commandes Docker derrière un proxy:

docker search ubuntu
2
Gary Mendonca

Peut-être devez-vous configurer des variables minuscules. Dans mon cas, mon fichier /etc/systemd/system/docker.service.d/http-proxy.conf ressemble à ceci:

[Service]
Environment="ftp_proxy=http://<user>:<password>@<proxy_ip>:<proxy_port>/"
Environment="http_proxy=http://<user>:<password>@<proxy_ip>:<proxy_port>/"
Environment="https_proxy=http://<user>:<password>@<proxy_ip>:<proxy_port>/"

Bonne chance! :)

2
Lawrence Ferreira

La solution complète pour Windows, pour configurer les paramètres d'un proxy.

< user>:< password>@< proxy-Host>:< proxy-port>

Vous pouvez le configurer directement en cliquant avec le bouton droit de la souris sur les paramètres, sur l’icône Docker, puis sur les mandataires. Là, vous pouvez configurer l'adresse proxy, le port, l'utilisateur et le mot de passe. Dans ce format:

< user>:< password>@< proxy-Host>:< proxy-port>

Exemple:

"geronimous:[email protected]:8080"

Rien de plus que ça.

1
user2280949

Sur Ubuntu 14.04 (Trusty Tahr) avec Docker 1.9.1, je viens de commenter la ligne http_proxy, de mettre à jour la valeur, puis de redémarrer le service Docker. 

export http_proxy="http://proxy.server.com:80"

et alors

service docker restart
1
Neo

Si vous êtes sur Ubuntu, vous devriez exécuter cette commande:

export https_proxy=http://your_name:password@ip_proxy:port docker 

Et rechargez Docker avec:

service docker.io restart

Ou allez à /etc/docker.io avec nano ...

1
koff75

Comme je n'ai pas le droit de commenter encore:

Pour CentOS 7, je devais activer le fichier EnvironmentFile dans "docker.service" comme décrit ici: Contrôler et configurer Docker avec systemd

Edit: J'ajoute ma solution comme indiqué par Nilesh. J'avais besoin d'ouvrir "/etc/systemd/system/docker.service" et de l'ajouter dans la section 

[Un service]

EnvironmentFile = -/etc/sysconfig/docker

À ce moment-là seulement, le fichier "etc/sysconfig/docker" a été chargé sur mon système.

1
Maximilian Wollnik

Sur RHEL6.6 uniquement, cela fonctionne (notez l'utilisation de export):

/ etc/sysconfig/docker

export http_proxy="http://myproxy.example.com:8080"
export https_proxy="http://myproxy.example.com:8080"

REMARQUE: les deux peuvent utiliser le protocole http.)

Merci à https://crondev.com/running-docker-behind-proxy/

0
vaughan

Dans mon réseau, Ubuntu fonctionne derrière un serveur proxy d'entreprise ISA. Et cela nécessite une authentification. J'ai essayé toutes les solutions mentionnées ci-dessus et rien n'a aidé. Ce qui a vraiment aidé, c’est d’écrire une ligne proxy dans le fichier /etc/systemd/system/docker.service.d/https-proxy.conf sans nom de domaine.

Au lieu de

Environment="HTTP_PROXY=http://user@domain:password@proxy:8080"

ou

Environment="HTTP_PROXY=http://domain\user:password@proxy:8080"

et un autre remplacement tel que @ -> %40 ou \ -> \\ que j'ai essayé d'utiliser

Environment="HTTP_PROXY=http://user:password@proxy:8080"

Et ça marche maintenant.

0
Dmitry Polyakov

Je faisais également face au même problème derrière un pare-feu. Suivez les étapes ci-dessous:

$ Sudo vim /etc/systemd/system/docker.service.d/http_proxy.conf
[Service]
Environment="HTTP_PROXY=http://username:password@IP:port/"

N'utilisez ni ne supprimez le fichier https_prxoy.conf.

recharger et redémarrer votre menu fixe

$ Sudo systemctl daemon-reload
$ Sudo systemctl restart docker
$ docker pull hello-world
Using default tag: latest
latest: Pulling from library/hello-world
1b930d010525: Pull complete
Digest: sha256:2557*********************************8
Status: Downloaded newer image for hello-world:latest
0
abhishek pant

Essaye ça:

Sudo HTTP_PROXY=http://<IP address of proxy server:port> docker -d & 
0
Abdennour TOUMI