Impossibile scaricare le immagini Docker dietro un proxy


330

Ho installato Docker sul mio Ubuntu 13.10 (Saucy Salamander) e quando scrivo nella mia console:

sudo docker pull busybox

Ottengo il seguente errore:

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

Versione 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

Sono dietro un server proxy senza autenticazione e questo è il mio /etc/apt/apt.conffile:

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

Che cosa sto facendo di sbagliato?


6
Per gli utenti e boot2docker Windows, vedere stackoverflow.com/a/29303930/6309
VonC

1
Un dettaglio minore: apt non supporta affatto i proxy SOCKS. Acquire::socks::proxysignifica impostare il proxy per tutti gli URL che iniziano con uno socksschema. Dal momento che il tuo sources.listnon ha alcun socks://URL, quella linea viene completamente ignorata.
Hans-Christoph Steiner,

Che dire docker-compose?
Mohammad Masoumi,

Risposte:


797

Ecco un link alla documentazione ufficiale Docker per proxy HTTP: https://docs.docker.com/config/daemon/systemd/#httphttps-proxy

Un rapido schema:

Innanzitutto, crea una directory a discesa systemd per il servizio Docker:

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

Ora crea un file chiamato /etc/systemd/system/docker.service.d/http-proxy.confche aggiunge la HTTP_PROXYvariabile d'ambiente:

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

Se si dispone di registri Docker interni che è necessario contattare senza proxy, è possibile specificarli tramite la NO_PROXYvariabile di ambiente:

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

Modifiche al filo:

$ sudo systemctl daemon-reload

Verifica che la configurazione sia stata caricata:

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

Riavvia Docker:

$ sudo systemctl restart docker

3
Questo funziona per Debian Jessie con Docker 1.6.2. La modifica in qualche modo /etc/default/dockernon funziona. Forse dovrei rimuovere exportcome quello documentato per Centos.
neurite,

2
Per i vecchi SysV modifica / etc / sysconfig / docker come in docs.oracle.com/cd/E37670_01/E37355/html/… - Oracle Linux 6.7
SidJ

2
NB: ho ipotizzato che "daemon-ricaricare" sarebbe sufficiente per applicare le modifiche alla finestra mobile, ma in realtà sudo systemctl restart dockerè strettamente necessario per farlo funzionare.
Jose Alban,

4
Per ubuntu 14.04 fare riferimento alla risposta di @ n3o, poiché systemctl non è disponibile per ubuntu 14.04, viene utilizzato upstartper richiamare i servizi.
chinmay,

4
Ora sta restituendo "Proxy Authentication Required" ... come configurare username e passoword?
pino

88

Le impostazioni del proxy APT non sono correlate a Docker.

Docker utilizza la variabile di ambiente HTTP_PROXY, se presente. Per esempio:

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

Invece, ti suggerisco di dare un'occhiata al tuo /etc/default/dockerfile di configurazione: dovresti avere una riga per decommentare (e forse regolare) per applicare automaticamente le tue impostazioni proxy. Quindi riavviare il server Docker:

service docker restart

8
Nel mio caso / etc / default / docker conteneva un esempio in minuscolo (http_proxy), ma per far funzionare le cose dovevo aggiungere lì le impostazioni in maiuscolo (HTTP_PROXY).
Mekk,

non dovresti impostare HTTP_PROXY per il client
docker

3
Non funziona con la finestra mobile 1.9.1, invece vedi questa risposta di seguito
Peter Dotchev

1
Questo funziona con Ubuntu 14.04 durante l'installazione della finestra mobile da apt.dockerproject.org.
Michael Kopp,

1
Questo non funziona su Debian 8.8, ed è necessario impostare http_proxy in /etc/systemd/system/docker.service.d come mostrato nella risposta accettata
Roman Mik,

60

Su CentOS il file di configurazione per Docker è su:

/etc/sysconfig/docker

L'aggiunta della riga seguente mi ha aiutato a far funzionare il demone Docker dietro un server proxy:

HTTP_PROXY="http://<proxy_host>:<proxy_port>"
HTTPS_PROXY="http://<proxy_host>:<proxy_port>"

7
export HTTP_PROXY = "http: // <nomeutente>: <password> @ <proxy_host>: <proxy_port>" per quelli che stanno dietro i proxy aziendali
Nicolas Mommaerts

per me questo ha funzionato SOLO senza il export. Sei sicuro che sia corretto?
Frans

4
Per me exportfunziona solo su CentOS6 e senza CentOS7
user2363318

1
Su Centos7, inoltre, non ho dovuto utilizzare l'esportazione
Banjocat,

2
export HTTP_PROXY=...è un Bashismo, per shell non Bash (come potrebbe essere / bin / sh), usa due righe HTTP_PROXY=...e poi export HTTP_PROXY Detto questo, non mi serviva exportaffatto.
Cameron Kerr,

42

Se stai utilizzando il nuovo Docker per Mac (o Docker per Windows ), fai semplicemente clic con il pulsante destro del mouse sull'icona della barra Docker e seleziona Preferenze (Windows: Impostazioni), quindi vai su Avanzate e in Proxy specifica le impostazioni proxy lì. Fai clic su Applica e riavvia e attendi fino al riavvio di Docker.


Nel caso in cui qualcuno usi un proxy associato localmente (ad es. 127.0.0.1:8787 ) su macOS come me, ecco la guida di installazione più dettagliata: Perché un proxy associato localmente non funziona
Rockallite

Ho impostato il mio proxy tramite Windows: impostazioni, ma questi non sono i proxy di moltiplicazione alla mia contenitori stackoverflow.com/questions/48272933/...
amique

Per me avevo solo bisogno di inserire il mio server DNS e ha funzionato allora. Grazie.
Richin,

32

Su Ubuntu devi impostare http_proxy per il demone Docker, non il processo client. Questo viene fatto in /etc/default/docker(vedi qui ).


dice che non ho il permesso di accedere al tuo gruppo. Nel link.
Azizbro,

Non penso che questo funzioni per Ubuntu 18.04 e versioni successive.
zslim,

27

Per estendere la risposta di Arun , affinché funzioni in CentOS 7, ho dovuto rimuovere i comandi "export". Quindi modifica

/etc/sysconfig/docker

E aggiungi:

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

Quindi riavviare Docker:

sudo service docker restart

La fonte è questo post sul blog .


2
È richiesto solo HTTP_PROXY (testato su Fedora 20).
sheldonh,

Perfetto per Suse 12!
Decano Meehan,

14

Perché un proxy associato localmente non funziona

Il problema

Se stai eseguendo un proxy associato localmente , ad esempio in ascolto 127.0.0.1:8989, NON funzionerà in Docker per Mac . Dalla documentazione Docker :

Voglio connettermi da un contenitore a un servizio sull'host

Il Mac ha un indirizzo IP che cambia (o nessuno se non si ha accesso alla rete). La nostra attuale raccomandazione è quella di collegare un IP non utilizzato lo0all'interfaccia sul Mac; per esempio:, sudo ifconfig lo0 alias 10.200.10.1/24e assicurati che il tuo servizio stia ascoltando questo indirizzo o 0.0.0.0(cioè no 127.0.0.1). Quindi i contenitori possono connettersi a questo indirizzo.

Lo stesso vale per il lato server Docker. (Per comprendere il lato server e lato client di Docker, provare a eseguire docker version.) E il lato server viene eseguito su un livello di virtualizzazione che ha il suo localhost. Pertanto, non si connetterà al server proxy sullocalhost sistema operativo host.

La soluzione

Quindi, se stai usando un proxy associato localmente come me, in pratica dovresti fare le seguenti cose per farlo funzionare con Docker per Mac:

  1. Fai ascoltare il tuo server proxy 0.0.0.0anziché 127.0.0.1. Attenzione: è necessaria un'adeguata configurazione del firewall per impedire l'accesso dannoso ad esso.

  2. Aggiungi un alias di loopback lo0all'interfaccia, ad esempio 10.200.10.1/24:

     sudo ifconfig lo0 alias 10.200.10.1/24
    
  3. Impostare il proxy HTTP e / o HTTPS su 10.200.10.1:8989da Preferenze nel menu della barra delle applicazioni Docker (si supponga che il server proxy sia in ascolto sulla porta 8989).

Successivamente, prova le impostazioni del proxy eseguendo un comando in un nuovo contenitore da un'immagine che non è stata scaricata:

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

Nota: l'alias di loopback impostato daifconfignon viene conservato dopo un riavvio. Per renderlo persistente è un altro argomento. Si prega di controllare questo post del blog in giapponese (Google Translate può essere d'aiuto).


Grazie a questo, ho cercato di trovare una soluzione per l'ultimo anno o giù di lì con SquidMan su Mac quando provavo ad accedere sia al lavoro che alla rete esterna tramite il proxy aziendale. Ho avuto questo per aggirare agganciandolo a launchd per essere configurato all'avvio. developer.apple.com/library/content/documentation/MacOSX/…
Proctor

Grazie uomo. Finalmente ho trovato il tuo post! Funziona. Se stai usando cntlm, non dimenticare di aggiungere il binding 0.0.0.0 alla tua configurazione. es. Ascolta 0.0.0.0: 8989
Felix,

sto usando anche cntlm e lo cambio in modalità gateway
Lee Gary

10

Questa è la correzione che ha funzionato per me: Ubuntu, versione Docker: 1.6.2

Nel file /etc/default/docker, aggiungi la riga:

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

Riavvia Docker

sudo service docker restart

Lavorando su Docker v1.12.1 su Ubuntu 14.04 e Mint 17.3
wmarbut

1
Funziona con 14.04.4 + Docker versione 17.03.1-ce, build c6d412e
okwap

8

Per configurare Docker in modo che funzioni con un proxy, è necessario aggiungere la variabile di ambiente HTTPS_PROXY / HTTP_PROXY al file sysconfig di Docker (/etc/sysconfig/docker ).

A seconda dell'utilizzo init.do dello strumento di servizi, è necessario aggiungere l'istruzione "export" (a causa dei registri di report Debian Bug - # 767441. Esempi in / etc / default / docker sono fuorvianti riguardo alla sintassi supportata ):

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

Il repository Docker (Docker Hub) supporta solo HTTPS. Per far funzionare Docker con proxy di intercettazione SSL è necessario aggiungere il certificato radice proxy al truststore dei sistemi.

Per CentOS, copiare il file in /etc/pki/ca-trust/source/anchors/ e aggiornare il truststore CA e riavviare il servizio Docker.

Se il proxy utilizza l'autenticazione NTLMv2, è necessario utilizzare proxy intermedi come Cntlm per collegare l'autenticazione. Questo post sul blog lo spiega in dettaglio .


5

Nella nuova versione di Docker, docker-engine , in una distribuzione basata su systemd , è necessario aggiungere la riga della variabile di ambiente a /lib/systemd/system/docker.service , come è menzionato da altri:

Environment="HTTP_PROXY=http://hostname_or_ip:port/"

Ciò era necessario su RHEL7.
dbalakirev,

aggiungi la linea alla sezione [Servizio]
volkit

5

Dopo aver installato Docker, procedere come segue:

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

Quindi, puoi tirare o fare qualsiasi cosa:

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)

3

Dato che non mi è ancora permesso commentare:

Per CentOS 7 dovevo attivare EnvironmentFile in "docker.service" come descritto qui: Controllo e configurazione di Docker con systemd .

Modifica: sto aggiungendo la mia soluzione come indicato da Nilesh. Ho dovuto aprire "/etc/systemd/system/docker.service" e ho dovuto aggiungere all'interno della sezione

[Servizio]

EnvironmentFile = - / etc / sysconfig / finestra mobile

Solo allora il file "etc / sysconfig / docker" è stato caricato sul mio sistema.


3

Per risolvere il problema con l'arricciatura nella build Docker, ho aggiunto quanto segue all'interno del Dockerfile:

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

Notare che l'istruzione ENV è PRIMA dell'istruzione RUN.

E per rendere il demone Docker in grado di accedere a Internet (utilizzo Kitematic con boot2docker), ho aggiunto quanto segue in /var/lib/boot2docker/profile:

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

Quindi ho riavviato Docker con sudo /etc/init.d/docker restart.


3

Se utilizzo il proxy socks5, ecco il mio test con Docker 17.03.1-ce con l'impostazione "all_proxy", e ha funzionato:

# 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

3

La soluzione completa per Windows, per configurare le impostazioni del proxy.

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

È possibile configurarlo direttamente facendo clic con il pulsante destro del mouse sulle impostazioni, sull'icona Docker, quindi su Proxy.

Lì puoi configurare l'indirizzo proxy, la porta, il nome utente e la password.

In questo formato:

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

Esempio:

"geronimous:mypassword@192.168.44.55:8080"

Nient'altro che questo.


2

La semplice impostazione delle variabili di ambiente proxy non mi ha aiutato nella versione 1.0.1 ... Ho dovuto aggiornare il /etc/default/docker.iofile con il valore corretto per la variabile "http_proxy".


2

Se sei in Ubuntu, esegui questi comandi per aggiungere il tuo proxy.

sudo nano /etc/default/docker

E decommenta le linee che specifica

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

E sostituiscilo con il server proxy e il nome utente appropriati.

Quindi riavviare Docker usando:

service docker restart

Ora puoi eseguire i comandi Docker dietro il proxy:

docker search ubuntu

2

Forse devi impostare variabili minuscole. Nel mio caso, il mio file /etc/systemd/system/docker.service.d/http-proxy.conf è simile al seguente:

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

In bocca al lupo! :)


2

Stavo anche affrontando lo stesso problema dietro un firewall. Segui i passaggi seguenti:

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

Non utilizzare o rimuovere il file https_prxoy.conf.

Ricarica e riavvia il contenitore Docker:

$ 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

1

Se sei su Ubuntu, dovresti eseguire questo comando:

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

E ricarica Docker con:

service docker.io restart

Oppure vai a /etc/docker.iocon nano ...


1

Su Ubuntu 14.04 (Trusty Tahr) con Docker 1.9.1, ho appena decommentato la http_proxylinea, aggiornato il valore e quindi riavviato il servizio Docker.

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

e poi

service docker restart

0

Solo su RHEL6.6 funziona (nota l'uso di export):

/ Etc / sysconfig / finestra mobile

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

NOTA: entrambi possono utilizzare il httpprotocollo.)

Grazie a https://crondev.com/running-docker-behind-proxy/


0

Nella mia rete, Ubuntu funziona dietro un server proxy ISA aziendale. E richiede autenticazione. Ho provato tutte le soluzioni sopra menzionate e nulla ha aiutato. Ciò che ha veramente aiutato è stato scrivere una riga proxy in un file/etc/systemd/system/docker.service.d/https-proxy.conf senza un nome di dominio.

Invece di

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

o

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

e qualche altro sostituto come @ -> %40o \ -> \\ho provato a utilizzare

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

E funziona ora.


0

Prova questo:

sudo HTTP_PROXY=http://<IP address of proxy server:port> docker -d & 

0

Questo non risponde esattamente alla domanda, ma potrebbe aiutare, soprattutto se non si desidera gestire i file di servizio.

Nel caso in cui tu sia quello che ospita l'immagine, un modo è quello di convertire l'immagine come archivio tar, usando qualcosa come il seguente sul server .

docker save <image-name> --output <archive-name>.tar

Basta scaricare l'archivio e trasformarlo in un'immagine.

docker load <archive-name>.tar
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.