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

j'ai installé Docker sur mon Ubuntu 13.10 (Salamandre Sauteuse) et quand je tape dans ma console:

sudo docker pull busybox

j'obtiens 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 c'est 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 de mal?

221
demandé sur Peter Mortensen 2014-04-16 17:58:32

22 réponses

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

Un rapide aperçu:

tout d'abord, créez un répertoire d'accueil systemd pour le service Docker:

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

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

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

si vous avez registres Dockers internes que vous devez contacter sans mandataire, 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"

vider les changements:

$ sudo systemctl daemon-reload

vérifier 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
532
répondu Alexandre Mélard 2018-09-25 10:54:01

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 à la place, je vous suggère de regarder votre fichier de configuration /etc/default/docker : vous devriez avoir une ligne à décommenter (et peut-être ajuster) pour obtenir vos paramètres de proxy appliqués automatiquement. Puis redémarrez le serveur Docker:

service docker restart
85
répondu mbarthelemy 2014-04-16 19:29:05

sur CentOS le fichier de configuration pour Docker est à:

/etc/sysconfig/docker

ajouter 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>"
50
répondu Arun Y 2018-09-19 15:59:05

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

32
répondu gkephorus 2018-09-19 15:59:55

si vous utilisez le nouveau Docker pour Mac (ou Docker pour Windows ), cliquez avec le bouton droit de la souris sur l'icône Docker tray et sélectionnez Preferences (Windows: Settings), puis allez à avancé, et sous Proxies spécifiez vos paramètres de proxy. Cliquez sur , appliquez et redémarrez et attendez que Docker redémarre.

22
répondu Pedro Madrid 2016-11-04 21:11:25

pour étendre la réponse D'Arun ci-dessus, pour que cela fonctionne dans CentOS 7, j'ai dû supprimer les commandes" exporter". Modifier

/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

Le source cet article de blog .

22
répondu zummed 2018-09-19 16:00:55

Pourquoi localement lié proxy ne fonctionne pas

Le Problème

si vous utilisez un Local-bound proxy, p.ex. écoute sur 127.0.0.1:8989 , ça ne marchera pas dans Docker pour Mac . De la documentation Docker :

je veux me connecter d'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 de joindre une adresse IP non utilisée à l'interface lo0 sur le Mac; par exemple: sudo ifconfig lo0 alias 10.200.10.1/24 , et de s'assurer que votre service est à l'écoute sur cette adresse ou 0.0.0.0 (c'est-à-dire pas 127.0.0.1 ). Les conteneurs peuvent alors se connecter à cette adresse.

Le similaire est pour Côté Serveur Docker. (Pour comprendre le côté serveur et côté client de Docker, essayez de lancer docker version .) Et le côté serveur tourne sur une couche de virtualisation qui a sa propre localhost . Par conséquent, il ne se connectera pas au serveur proxy sur le localhost de l'OS hôte.

la solution

donc, si vous utilisez un proxy local comme moi, vous devez faire les choses suivantes pour que ça fonctionne avec Docker pour Mac:

  1. Faites votre serveur mandataire écoutez 0.0.0.0 au lieu de 127.0.0.1 . attention: vous aurez besoin d'une configuration appropriée du pare-feu pour empêcher tout accès malveillant.

  2. Ajouter un alias loopback à l'interface lo0 , p.ex. 10.200.10.1/24 :

    sudo ifconfig lo0 alias 10.200.10.1/24
    
  3. définir le proxy HTTP et/ou HTTPS à 10.200.10.1:8989 de Preferences dans le menu Docker tray (supposons que le serveur proxy écoute sur le port 8989 ).

après cela, testez les paramètres du proxy en lançant une commande dans un nouveau conteneur à partir d'une image qui n'est pas 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
  ...

avis: le nom d'emprunt défini par ifconfig ne préserve pas après un redémarrage. Pour le rendre persistant est un autre sujet. Veuillez cocher ce blog en Japonais (Google Translate peut aider).

11
répondu Rockallite 2017-01-19 01:13:57

C'est la solution qui a fonctionné pour moi: Ubuntu, Docker version: 1.6.2

dans le fichier /etc/default/docker , ajouter la ligne:

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

Redémarrer Docker

sudo service docker restart
9
répondu n3o 2018-09-19 16:10:23

pour configurer Docker pour qu'il fonctionne avec un proxy, vous devez ajouter la variable D'environnement HTTPS_PROXY / HTTP_PROXY au fichier sysconfig de Docker ( /etc/sysconfig/docker ).

selon que vous utilisez init.d ou l'outil services, vous devez ajouter la déclaration" export "(due à ). Les exemples dans /etc/default/docker sont trompeurs en ce qui concerne la syntaxe supportée ):

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 dépôt Docker (Docker Hub) ne prend en charge que les HTTPS. Pour obtenir Docker travaillant avec des proxies d'interception SSL, vous devez ajouter le certificat racine de proxy à la librairie system trust.

pour CentOS, Copiez le fichier à /etc/pki/ca-trust/source/anchors/ et mettez à jour le magasin en fiducie de L'AC et redémarrez le service Docker.

si votre mandataire utilise l'authentification NTLMv2 - vous devez utiliser des mandataires intermédiaires comme Cntlm pour combler l'authentification. ce billet de blog l'explique en détail .

6
répondu Marcel Friedmann 2018-09-19 16:05:54

après avoir installé Docker, faites ce qui suit:

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

alors, 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
répondu Marcello de Sales 2018-09-19 16:44:37

dans la nouvelle version de Docker, docker-engine , dans un systemd distribution basée, vous devez ajouter la ligne de variable d'environnement à /lib/systemd/system/docker.service , comme il est mentionné par d'autres:

Environment="HTTP_PROXY=http://hostname_or_ip:port/"
3
répondu Mehdi Hamidi 2018-09-19 16:08:37

pour résoudre le problème avec curl in docker build, j'ai ajouté ce qui suit à L'intérieur du fichier Dockerfile:

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 avant L'instruction RUN.

et pour permettre au démon Docker 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

puis j'ai redémarré Docker avec sudo /etc/init.d/docker restart .

3
répondu Bruno Negrão Zica 2018-09-19 16:11:20

peut-être que vous avez besoin de configurer des variables en minuscules. Dans mon cas, mon /etc/systemd/system/docker.service.d / http-proxy.conf le fichier 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
répondu Lawrence Ferreira 2017-11-10 12:51:50

le simple fait de définir des variables d'environnement par procuration ne m'a pas aidé dans la version 1.0.1... J'ai dû mettre à jour le fichier /etc/default/docker.io avec la valeur correcte pour la variable "http_proxy".

2
répondu Richil 2018-09-19 16:08:05

si vous utilisez SOCKS5 proxy, voici mon test avec le Docker 17.03.1-ce avec le paramètre "all_proxy", et il 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
répondu btpka3 2018-09-19 16:12:40

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

sudo nano /etc/default/docker

et désactiver les lignes qui spécifient

#export http_proxy = http://username:password@10.0.1.150:8050

et le remplacer par votre serveur mandataire approprié et votre nom d'utilisateur.

puis redémarrez Docker en utilisant:

service docker restart

Maintenant vous pouvez exécuter des commandes Docker derrière proxy:

docker search ubuntu
2
répondu Gary Mendonca 2018-09-19 16:39:56

si vous êtes sur Ubuntu, vous devez exécuter cette commande:

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

et recharger Docker avec:

service docker.io restart

ou /etc/docker.io avec nano...

1
répondu koff75 2018-09-19 16:06:42

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

pour CentOS 7 j'avais besoin d'activer L'Environnementfile dans "docker.service "comme il est 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 j'ai dû ajouter dans la section

[Service]

EnvironmentFile= - / etc/sysconfig/docker

était alors seulement le fichier" etc/sysconfig/docker " chargé sur mon système.

1
répondu Maximilian Wollnik 2018-09-19 16:07:22

sur Ubuntu 14.04 (Trusty Tahr) avec Docker 1.9.1, je viens de décommenter la ligne http_proxy , mis à jour la valeur et puis redémarré le service Docker.

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

et puis

service docker restart
1
répondu Neo 2018-09-19 16:09:42

sur RHEL6.6 seulement 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"

NOTE: les deux peuvent utiliser le protocole http .)

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

0
répondu vaughan 2017-09-08 14:41:18

sur mon réseau, Ubuntu travaille derrière un serveur proxy ISA d'entreprise. 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 de 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 \ -> \ j'ai essayé d'utiliser

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

et ça marche maintenant.

0
répondu Dmitry Polyakov 2018-09-19 16:42:05

essayez ceci:

sudo HTTP_PROXY=http://<IP address of proxy server:port> docker -d & 
-1
répondu Abdennour TOUMI 2018-09-25 10:46:29