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?
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
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
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>"
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 ).
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.
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
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 ou0.0.0.0
(c.-à-d. pas127.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.
Donc, si vous utilisez un proxy local comme moi, vous devrez essentiellement procéder comme suit pour que cela fonctionne avec Docker pour Mac:
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.
Ajoutez un alias de bouclage à l'interface lo0
, par exemple. 10.200.10.1/24
:
Sudo ifconfig lo0 alias 10.200.10.1/24
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).
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
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 .
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)
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/"
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
.
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".
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
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
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! :)
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.
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
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 ...
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.
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
.)
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.
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
Essaye ça:
Sudo HTTP_PROXY=http://<IP address of proxy server:port> docker -d &