it-swarm.com.de

Docker-Bilder können nicht hinter einem Proxy heruntergeladen werden

Ich habe Docker auf meinem Ubuntu 13.10 (Saucy Salamander) installiert und wenn ich meine Konsole eingebe:

Sudo docker pull busybox

Ich erhalte folgende Fehlermeldung:

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

Docker-Version:

$ 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

Ich stehe hinter einem Proxy-Server ohne Authentifizierung und dies ist meine /etc/apt/apt.conf-Datei:

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/";

Was mache ich falsch?

240
rpayanm

Hier ist ein Link zur offiziellen Docker-Dokumentation für Proxy-HTTP: https://docs.docker.com/config/daemon/systemd/#httphttps-proxy

Ein kurzer Überblick:

Erstellen Sie zunächst ein systemd-Drop-In-Verzeichnis für den Docker-Dienst:

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

Erstellen Sie nun eine Datei mit dem Namen /etc/systemd/system/docker.service.d/http-proxy.conf, die die Umgebungsvariable HTTP_PROXY hinzufügt:

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

Wenn Sie über interne Docker-Registrierungen verfügen, die Sie ohne Proxy kontaktieren müssen, können Sie diese über die Umgebungsvariable NO_PROXY angeben:

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

Flush-Änderungen:

$ Sudo systemctl daemon-reload

Stellen Sie sicher, dass die Konfiguration geladen wurde:

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

Docker neu starten:

$ Sudo systemctl restart docker
603

Ihre APT Proxy-Einstellungen beziehen sich nicht auf Docker.

Docker verwendet die Umgebungsvariable HTTP_PROXY, falls vorhanden. Beispiel:

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

Stattdessen schlage ich vor, dass Sie sich Ihre /etc/default/docker-Konfigurationsdatei ansehen: Sie sollten eine Zeile zum Entfernen von Kommentaren haben (und möglicherweise anpassen), damit Ihre Proxy-Einstellungen automatisch angewendet werden. Starten Sie dann den Docker-Server neu: 

service docker restart
87
mbarthelemy

Unter CentOS befindet sich die Konfigurationsdatei für Docker unter:

/etc/sysconfig/docker

Das Hinzufügen der folgenden Zeile half mir, den Docker-Daemon hinter einem Proxyserver zum Laufen zu bringen:

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

Auf Ubuntu müssen Sie http_proxy für den Docker-Dämon und nicht den Client-Prozess einstellen. Dies geschieht in /etc/default/docker (siehe hier ).

32
gkephorus

Wenn Sie das neue Docker für Mac (oder Docker für Windows ) verwenden, klicken Sie mit der rechten Maustaste auf das Docker-Tray-Symbol und wählen Sie Preferences (Windows: Einstellungen). Wechseln Sie dann zu Advanced , und geben Sie unter Proxies dort Ihre Proxy-Einstellungen an. Klicken Sie auf Apply and Restart und warten Sie, bis Docker neu gestartet wird.

29
Pedro Madrid

Um die oben beschriebene Antwort von Arun zu erweitern, musste ich die "Export" -Befehle entfernen, damit dies in CentOS 7 funktioniert. So bearbeiten

/etc/sysconfig/docker

Und füge hinzu:

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

Dann Docker neu starten:

Sudo service docker restart

Die Quelle ist dieser Blogbeitrag .

24
zummed

Warum ein lokal gebundener Proxy nicht funktioniert

Das Problem

Wenn Sie einen lokal gebundenen Proxy ausführen, z. Hören Sie auf 127.0.0.1:8989, es funktioniert nicht in Docker für Mac . Aus der Docker-Dokumentation :

Ich möchte eine Verbindung von einem Container zu einem Dienst auf dem Host herstellen

Der Mac hat eine sich ändernde IP-Adresse (oder keine, wenn Sie keinen Netzwerkzugriff haben). Derzeit empfehlen wir, eine nicht verwendete IP an die Schnittstelle lo0 des Mac anzuschließen. Zum Beispiel: Sudo ifconfig lo0 alias 10.200.10.1/24, und stellen Sie sicher, dass Ihr Dienst diese Adresse oder 0.0.0.0 abhört (dh nicht 127.0.0.1). Dann können sich Container mit dieser Adresse verbinden.

Ähnliches gilt für die Docker-Serverseite. (Um die Server- und Client-Seite von Docker zu verstehen, versuchen Sie, docker version auszuführen.) Und die Server-Seite wird auf einer Virtualisierungsebene ausgeführt, die über eine eigene localhost verfügt. Daher wird keine Verbindung zum Proxy-Server auf dem localhost des Host-Betriebssystems hergestellt.

Die Lösung

Wenn Sie also einen lokal gebundenen Proxy wie mich verwenden, müssen Sie im Grunde die folgenden Schritte ausführen, damit Docker für Mac funktioniert:

  1. Lassen Sie Ihren Proxy-Server 0.0.0.0 anstelle von 127.0.0.1 abhören. Achtung: Sie benötigen eine ordnungsgemäße Firewall-Konfiguration, um den böswilligen Zugriff darauf zu verhindern.

  2. Fügen Sie der Schnittstelle lo0 einen Loopback-Alias ​​hinzu, z. 10.200.10.1/24:

    Sudo ifconfig lo0 alias 10.200.10.1/24
    
  3. Setzen Sie den HTTP- und/oder HTTPS-Proxy im Docker-Tray-Menü auf 10.200.10.1:8989 aus Preferences (vorausgesetzt, der Proxy-Server überwacht den Port 8989).

Testen Sie anschließend die Proxy-Einstellungen, indem Sie einen Befehl in einem neuen Container von einem nicht heruntergeladenen Image ausführen:

$ 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
  ...

Hinweis: Der von ifconfig festgelegte Loopback-Alias ​​wird nach einem Neustart nicht beibehalten. Um es dauerhaft zu machen, ist ein anderes Thema. Bitte überprüfen Sie dieser Blog-Beitrag auf Japanisch (Google Translate kann helfen).

13
Rockallite

Dies ist das Update, das für mich funktioniert hat: Ubuntu, Docker-Version: 1.6.2

Fügen Sie in der Datei /etc/default/docker die Zeile hinzu:

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

Starten Sie Docker neu

Sudo service docker restart
9
n3o

Um Docker für die Verwendung mit einem Proxy zu konfigurieren, müssen Sie die Umgebungsvariable HTTPS_PROXY/HTTP_PROXY der Docker-Datei sysconfig (/etc/sysconfig/docker) hinzufügen.

Abhängig davon, ob Sie init.d oder das Services-Tool verwenden, müssen Sie die "export" -Anweisung hinzufügen (aufgrund von Debian Bug-Protokolldateien - # 767441). Beispiele in/etc/default/docker sind irreführend bezüglich der unterstützten Syntax):

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

Das Docker-Repository (Docker Hub) unterstützt nur HTTPS. Damit Docker mit SSL-Intercepting-Proxys arbeiten kann, müssen Sie das Proxy-Stammzertifikat dem Truststore des Systems hinzufügen.

Kopieren Sie für CentOS die Datei in /etc/pki/ca-trust/source/anchors/, aktualisieren Sie den CA Trust Store und starten Sie den Docker-Dienst neu.

Wenn Ihr Proxy die NTLMv2-Authentifizierung verwendet, müssen Sie Zwischenproxys wie Cntlm verwenden, um die Authentifizierung zu überbrücken. Dieser Blogbeitrag erklärt es ausführlich .

6

Führen Sie nach der Installation von Docker folgende Schritte aus:

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

Dann können Sie etwas ziehen oder tun:

[email protected] ~]$ 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

In der neuen Version von Docker, Docker-Engine, sollten Sie in einer auf systemd basierenden Distribution die Umgebungsvariablenzeile zu /lib/systemd/system/docker.service, wie es von anderen erwähnt wird:

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

Um das Problem mit curl in Docker Build zu beheben, habe ich Folgendes in die Docker-Datei eingefügt:

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

Beachten Sie, dass die ENV-Anweisung BEFORE die RUN-Anweisung ist.

Damit der Docker-Dämon auf das Internet zugreifen kann (ich verwende Kitematic mit boot2docker), habe ich Folgendes in /var/lib/boot2docker/profile eingefügt:

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

Dann habe ich Docker mit Sudo /etc/init.d/docker restart neu gestartet.

3

Das Setzen von Proxy-Umgebungsvariablen hat mir in Version 1.0.1 nicht geholfen ... Ich musste die /etc/default/docker.io-Datei mit dem korrekten Wert für die Variable "http_proxy" aktualisieren.

2
Richil

Wenn Sie Socks5-Proxy verwenden, ist hier mein Test mit Docker 17.03.1-ce mit der Einstellung "all_proxy" und es hat funktioniert:

# Set up socks5 proxy server
ssh [email protected] -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

Wenn Sie sich in Ubuntu befinden, führen Sie diese Befehle aus, um Ihren Proxy hinzuzufügen.

Sudo nano /etc/default/docker

Und kommentieren Sie die Zeilen, die angeben

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

Und ersetzen Sie es durch Ihren geeigneten Proxy-Server und Benutzernamen.

Starten Sie dann Docker erneut mit:

service docker restart

Jetzt können Sie hinter dem Proxy Docker-Befehle ausführen:

docker search ubuntu
2
Gary Mendonca

Möglicherweise müssen Sie Variablen in Kleinbuchstaben einrichten. In meinem Fall sieht meine /etc/systemd/system/docker.service.d/http-proxy.conf -Datei folgendermaßen aus:

[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>/"

Viel Glück! :)

2

Die Komplettlösung für Windows, um Proxy-Einstellungen zu konfigurieren.

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

Sie können es direkt konfigurieren, indem Sie mit der rechten Maustaste auf Einstellungen im Docker-Symbol und dann auf Proxies klicken. Dort können Sie die Proxy-Adresse, den Port, den Benutzer und das Passwort konfigurieren. In diesem Format:

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

Beispiel:

"geronimous:[email protected]:8080"

Nichts mehr als das.

1
user2280949

Auf Ubuntu 14.04 (Trusty Tahr) mit Docker 1.9.1 habe ich die http_proxy-Zeile unkommentiert, den Wert aktualisiert und den Docker-Dienst neu gestartet. 

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

und dann

service docker restart
1
Neo

Wenn Sie Ubuntu verwenden, sollten Sie den folgenden Befehl ausführen:

export https_proxy=http://your_name:[email protected]_proxy:port docker 

Und laden Sie Docker mit:

service docker.io restart

Oder gehen Sie mit nano zu /etc/docker.io ...

1
koff75

Da darf ich noch nicht kommentieren:

Für CentOS 7 musste ich die Umgebungsdatei in "docker.service" aktivieren, wie hier beschrieben: Steuern und konfigurieren Sie Docker mit systemd

Edit: Ich füge meine Lösung hinzu, wie von Nilesh angegeben. Ich musste "/etc/systemd/system/docker.service" öffnen und in den Abschnitt hinzufügen 

[Bedienung]

EnvironmentFile = -/etc/sysconfig/docker

Erst dann wurde die Datei "etc/sysconfig/docker" in mein System geladen.

1

Bei RHEL6.6 funktioniert dies nur (beachten Sie die Verwendung von export):

/ etc/sysconfig/docker

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

HINWEIS: Beide können das http-Protokoll verwenden.)

Vielen Dank an https://crondev.com/running-docker-behind-proxy/

0
vaughan

In meinem Netzwerk arbeitet Ubuntu hinter einem corporate ISA Proxyserver. Und es erfordert eine Authentifizierung. Ich habe alle oben genannten Lösungen ausprobiert und nichts hat geholfen. Was wirklich geholfen hat, war, eine Proxyzeile in die Datei /etc/systemd/system/docker.service.d/https-proxy.conf ohne einen Domänennamen zu schreiben.

Anstatt

Environment="HTTP_PROXY=http://[email protected]:[email protected]:8080"

oder

Environment="HTTP_PROXY=http://domain\user:[email protected]:8080"

und ein anderer Ersatz wie @ -> %40 oder \ -> \\, den ich versucht habe zu verwenden

Environment="HTTP_PROXY=http://user:[email protected]:8080"

Und es funktioniert jetzt.

0
Dmitry Polyakov

Das gleiche Problem hatte ich auch hinter der Firewall. Befolgen Sie die folgenden Schritte:

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

Verwenden Sie die Datei https_prxoy.conf nicht.

laden Sie Ihr Docker neu und starten Sie es erneut

$ 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

Versuche dies:

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