Docker görüntüleri proxy arkasında indirilemiyor


330

Docker'ı Ubuntu 13.10 (Saucy Salamander) üzerine kurdum ve konsoluma yazarken:

sudo docker pull busybox

Aşağıdaki hatayı alıyorum:

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 sürümü:

$ 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

Kimlik doğrulaması olmayan bir proxy sunucusunun arkasındayım ve bu benim /etc/apt/apt.confdosyam:

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

Neyi yanlış yapıyorum?


6
Windows kullanıcıları ve boot2docker için bkz. Stackoverflow.com/a/29303930/6309
VonC

1
Küçük bir detay: apt, SOCKS proxy'lerini desteklemez. Acquire::socks::proxy, socksşema ile başlayan tüm URL'ler için proxy ayarlamak anlamına gelir . Senin bu yana sources.listherhangi yoktur socks://URL'ler, bu çizgi tamamen göz ardı edilir.
Hans-Christoph Steiner

Ne olmuş docker-compose?
Mohammad Masoumi

Yanıtlar:


797

Proxy HTTP için resmi Docker belgelerine bir bağlantı: https://docs.docker.com/config/daemon/systemd/#httphttps-proxy

Kısa bir özet:

İlk olarak, Docker hizmeti için bir systemd açılır dizini oluşturun:

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

Şimdi ortam değişkenini /etc/systemd/system/docker.service.d/http-proxy.confekleyen adlı bir dosya oluşturun HTTP_PROXY:

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

Proxy olmadan iletişim kurmanız gereken dahili Docker kayıtlarınız varsa, bunları NO_PROXYortam değişkeni ile belirtebilirsiniz :

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

Yıkama değişiklikleri:

$ sudo systemctl daemon-reload

Yapılandırmanın yüklendiğini doğrulayın:

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

Docker'ı yeniden başlatın:

$ sudo systemctl restart docker

3
Bu, Docker 1.6.2 çalıştıran Debian Jessie için geçerlidir. Bir şekilde düzenleme /etc/default/dockerçalışmaz. Belki de exportCentos için belgelenen gibi çıkarmalıyım .
nörit

2
Eski SysV için docs.oracle.com/cd/E37670_01/E37355/html/… adresinde olduğu gibi / etc / sysconfig / docker'ı düzenleyin - Oracle Linux 6.7
SidJ

2
Not: 'daemon-reload' sudo systemctl restart dockeröğesinin docker'a değişiklikler uygulamak için yeterli olacağını varsaydım, ancak aslında çalışması için kesinlikle gerekli.
Jose Alban

4
Ubuntu 14.04 için @ n3o'nun cevabına bakın, Ubuntu 14.04 systemctl için mevcut olmadığından upstart, hizmetleri getirmek için kullanılır.
chinmay

4
Şimdi "Proxy Kimlik Doğrulaması Gerekli" döndürüyor ... kullanıcı adı ve passoword nasıl yapılandırılır?
pinei

88

APT proxy ayarlarınız Docker ile ilgili değil.

Docker, varsa HTTP_PROXY ortam değişkenini kullanır. Örneğin:

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

Ancak bunun yerine, /etc/default/dockeryapılandırma dosyanıza bir göz atmanızı öneririm : Proxy ayarlarınızın otomatik olarak uygulanmasını sağlamak için, açıklanacak bir satıra (ve belki ayarlamaya) sahip olmanız gerekir. Ardından Docker sunucusunu yeniden başlatın:

service docker restart

8
Benim durumumda / etc / default / docker küçük harfli örnek (http_proxy) içeriyordu, ancak işlerim olması için orada büyük harfli ayar (HTTP_PROXY) eklemek zorunda kaldım.
Mekk

docker istemcisi için HTTP_PROXY ayarlamamalısınız
thomas.han

3
Docker

1
Bu, apt.dockerproject.org adresinden docker yüklerken Ubuntu 14.04 için çalışır.
Michael Kopp

1
Bu, Debian 8.8'de çalışmaz ve kabul edilen yanıtta gösterildiği gibi /etc/systemd/system/docker.service.d
Roman Mik

60

CentOS'ta Docker için yapılandırma dosyası şuradadır:

/etc/sysconfig/docker

Aşağıdaki satırı eklemek, Docker arka plan programının bir proxy sunucusunun arkasında çalışmasını sağlamama yardımcı oldu:

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

7
kurumsal proxy'lerin arkasındaki kullanıcılar için HTTP_PROXY = "http: // <kullanıcı adı:: <parola> @ <proxy_host>: <proxy_port>"
Nicolas Mommaerts

benim için bu SADECE olmadan çalıştı export. Bunun doğru olduğundan emin misin?
frans

4
Benim için exportsadece CentOS6 üzerinde çalışıyor ve CentOS7 üzerinde w / o çalışıyor
user2363318

1
Centos7'de de ihracat kullanmam gerekiyordu
Banjocat

2
export HTTP_PROXY=...bir Bashizm, Bash olmayan kabuklar için (ne / bin / sh olabilir gibi), iki satır kullanın HTTP_PROXY=...ve sonra export HTTP_PROXY dedi, hiç ihtiyacım yoktu export.
Cameron Kerr

42

Yeni Mac için Docker'ı (veya Windows için Docker'ı ) kullanıyorsanız, Docker tepsi simgesini sağ tıklayıp Tercihler'i (Windows: Ayarlar) seçin, ardından Gelişmiş'e gidin ve Proxy'ler altında proxy ayarlarınızı orada belirtin. Uygula ve Yeniden Başlat'ı tıklayın ve Docker yeniden başlayana kadar bekleyin.


Birisi benim gibi
macOS'ta


Benim için sadece benim DNS Sunucusu koymak gerekiyordu ve o zaman çalıştı. Teşekkürler.
richin

32

Ubuntu'da, istemci işlemi için değil Docker arka plan programı için http_proxy ayarlamanız gerekir. Bu işlem yapılır /etc/default/docker( buraya bakınız ).


grubunuza erişim iznim olmadığını söylüyor. Bağlantıda.
Azizbro

Bunun Ubuntu 18.04 ve üstü için geçerli olduğunu düşünmüyorum.
zslim

27

Arun'un cevabını uzatmak için, bunun CentOS 7'de çalışması için, "dışa aktar" komutlarını kaldırmak zorunda kaldım. Yani düzenle

/etc/sysconfig/docker

Ve Ekle:

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

Ardından Docker'ı yeniden başlatın:

sudo service docker restart

Kaynağı bu blog yayını .


2
Yalnızca HTTP_PROXY gereklidir (Fedora 20'de test edilmiştir).
sheldonh

Suse 12 için mükemmel!
Dean Meehan

14

Yerel olarak bağlı bir proxy neden çalışmıyor?

Sorun

Eğer bir çalıştırıyorsanız yerel bağlı vekil, örneğin dinlediği 127.0.0.1:8989o işe yaramaz, Mac için Docker . Gönderen Docker belgelerinde :

Bir kapsayıcıdan ana bilgisayardaki bir hizmete bağlanmak istiyorum

Mac'in değişen bir IP adresi vardır (veya ağ erişiminiz yoksa hiçbiri). Mevcut önerimiz, lo0Mac'teki arayüze kullanılmayan bir IP eklemektir ; örneğin: sudo ifconfig lo0 alias 10.200.10.1/24ve hizmetinizin bu adresi dinlediğinden 0.0.0.0(yani dinlemediğinden) emin olun 127.0.0.1. Ardından kaplar bu adrese bağlanabilir.

Benzer olan Docker sunucu tarafı içindir. (Docker'ın sunucu tarafını ve istemci tarafını anlamak için çalıştırmayı deneyin docker version.) Ve sunucu tarafı kendine ait bir sanallaştırma katmanında çalışır localhost. Bu nedenle, localhostana bilgisayar işletim sisteminin proxy sunucusuna bağlanmaz .

Çözüm

Bu nedenle, benim gibi yerel olarak bağlı bir proxy kullanıyorsanız, temel olarak Mac için Docker ile çalışmasını sağlamak için aşağıdaki şeyleri yapmanız gerekir:

  1. 0.0.0.0Bunun yerine proxy sunucunuzu dinleyin 127.0.0.1. Dikkat: Kötü amaçlı erişime engel olmak için uygun güvenlik duvarı yapılandırmasına ihtiyacınız olacaktır.

  2. lo0Arabirime geri döngü takma adı ekleyin , örneğin 10.200.10.1/24:

    sudo ifconfig lo0 alias 10.200.10.1/24
    
  3. HTTP ve / veya HTTPS vekil ayarlayın 10.200.10.1:8989gelen Tercihler Docker tepsisi menüsünde (proxy sunucusu bağlantı noktasında dinleme farz 8989).

Bundan sonra, indirilmeyen bir görüntüden yeni bir kapta bir komut çalıştırarak proxy ayarlarını test edin:

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

Uyarı: tarafından ayarlanan geri döngü takma adıifconfig, yeniden başlatmadan sonra korunmaz. Kalıcı kılmak başka bir konudur. Lütfen bu blog yayınını Japonca olarakkontrol edin(Google Çeviri yardımcı olabilir).


Bunun için teşekkürler, şirket proxy üzerinden hem iş hem de dış ağa erişmeye çalışırken Mac'te SquidMan'ı almak için geçen yıla kadar bir çözüm bulmaya çalışıyorum. Bu başlangıçta yapılandırılacak launchd içine çengel ile etrafında sopa var. developer.apple.com/library/content/documentation/MacOSX/…
Proctor

Teşekkürler dostum. Sonunda gönderinizi buldum! İşe yarıyor. Cntlm kullanıyorsanız, yapılandırmanıza 0.0.0.0 bağlayıcısını eklemeyi unutmayın. Örn. Dinle 0.0.0.0: 8989
Felix

ben de cntlm kullanıyorum ve ağ geçidi moduna değiştirin
Lee Gary

10

Benim için çalışan düzeltme: Ubuntu, Docker sürümü: 1.6.2

Dosyaya /etc/default/dockersatırı ekleyin:

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

Docker'ı yeniden başlat

sudo service docker restart

Ubuntu 14.04 ve Mint 17.3'te Docker v1.12.1 üzerinde çalışma
wmarbut

1
14.04.4 + Docker sürüm 17.03.1-ce, c6d412e derlemesi için çalışır
okwap

8

Docker'ı bir proxy ile çalışacak şekilde yapılandırmak için Docker sysconfig dosyasına HTTPS_PROXY / HTTP_PROXY ortam değişkenini eklemeniz gerekir (/etc/sysconfig/docker ) .

Kullanmayainit.d veya hizmet aracına bağlı olarak "dışa aktarma" ifadesini eklemeniz gerekir ( Debian Bug raporu günlükleri nedeniyle - # 767441. / Etc / default / docker'daki örnekler desteklenen sözdizimiyle ilgili yanıltıcıdır ):

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

Docker deposu (Docker Hub) yalnızca HTTPS'yi destekler. Docker'ın SSL yakalama proxy'leriyle çalışmasını sağlamak için sistem güven deposuna proxy kök sertifikası eklemeniz gerekir.

CentOS için dosyayı şuraya kopyalayın: /etc/pki/ca-trust/source/anchors/ CA güven deposuna ve güncelleyin ve Docker hizmetini yeniden başlatın.

Proxy'niz NTLMv2 kimlik doğrulaması kullanıyorsa - kimlik doğrulaması arasında köprü oluşturmak için Cntlm gibi ara proxy'ler kullanmanız gerekir . Bu blog yazısı ayrıntılı olarak açıklamaktadır .


5

Docker, yeni sürümünde liman işçisi-motor , bir de systemd tabanlı dağıtım yapmanız ortam değişkeni satırı eklemek gerekir /lib/systemd/system/docker.service başkaları tarafından belirtildiği gibi,:

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

Bu RHEL7'de gerekliydi.
dbalakirev

[Servis] bölümüne satır ekleyin
volkit

5

Docker'ı kurduktan sonra aşağıdakileri yapın:

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

Ardından, herhangi bir şey çekebilir veya yapabilirsiniz:

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

Henüz yorum yapmama izin verilmediği için:

CentOS 7 için "docker.service" içindeki EnvironmentFile dosyasını burada açıklandığı gibi etkinleştirmem gerekiyordu: Docker'ı systemd ile kontrol edip yapılandırın .

Düzenleme: Çözümümü Nilesh tarafından belirtildiği gibi ekliyorum. "/Etc/systemd/system/docker.service" dosyasını açmam gerekiyordu ve bölüme eklemek zorunda kaldım

[Hizmet]

EnvironmentFile = - / etc / sysconfig / liman işçisi

Ancak bundan sonra sistemime "etc / sysconfig / docker" dosyası yüklendi.


3

Docker derlemesinde kıvrılma sorununu çözmek için Dockerfile içine aşağıdakileri ekledim:

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

ENV ifadesinin RUN ifadesinden ÖNCE olduğuna dikkat edin.

Docker arka plan programının Internet'e erişmesini sağlamak için (Boot2docker ile Kitematic kullanıyorum) aşağıdakileri ekledim /var/lib/boot2docker/profile:

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

Sonra Docker'ı ile yeniden başlattım sudo /etc/init.d/docker restart.


3

Socks5 proxy kullanıyorsanız, burada "all_proxy" ayarlı Docker 17.03.1-ce ile testim ve işe yaradı:

# 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

Proxy ayarlarını yapılandırmak için Windows için eksiksiz çözüm.

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

Ayarları, Docker simgesine ve ardından Proxy'lere sağ tıklayarak doğrudan yapılandırabilirsiniz.

Burada proxy adresini, bağlantı noktasını, kullanıcı adını ve şifreyi yapılandırabilirsiniz.

Bu biçimde:

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

Misal:

"geronimous:mypassword@192.168.44.55:8080"

Bundan daha fazlası yok.


2

Sadece proxy ortam değişkenleri ayarlamak sürüm 1.0.1 bana yardımcı olmadı ... /etc/default/docker.ioDosyayı "http_proxy" değişkeni için doğru değeri ile güncellemek zorunda kaldı .


2

Ubuntu'daysanız, proxy'nizi eklemek için bu komutları yürütün.

sudo nano /etc/default/docker

Ve belirten satırları uncomment

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

Ve uygun proxy sunucunuz ve kullanıcı adınızla değiştirin.

Ardından Docker'ı aşağıdakileri kullanarak yeniden başlatın:

service docker restart

Artık Docker komutlarını proxy'nin arkasında çalıştırabilirsiniz:

docker search ubuntu

2

Belki de küçük harf değişkenleri ayarlamanız gerekir. Benim durumumda, /etc/systemd/system/docker.service.d/http-proxy.conf dosyam şöyle görünüyor:

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

İyi şanslar! :)


2

Bir güvenlik duvarının arkasında da aynı sorunla karşı karşıyaydım. Aşağıdaki adımları izleyin:

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

Https_prxoy.conf dosyasını kullanmayın veya kaldırmayın.

Docker kabınızı yeniden yükleyin ve yeniden başlatın:

$ 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

Ubuntu'daysanız, bu komutu yürütmelisiniz:

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

Docker'ı şununla yeniden yükleyin:

service docker.io restart

Veya /etc/docker.ionano ile git ...


1

Docker 1.9.1 ile Ubuntu 14.04'te (Trusty Tahr), sadece http_proxyhattı açtım , değeri güncelledim ve Docker hizmetini yeniden başlattım.

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

ve sonra

service docker restart


0

Ağımda Ubuntu, kurumsal bir ISA proxy sunucusunun arkasında çalışıyor. Ve kimlik doğrulaması gerektirir. Yukarıda belirtilen tüm çözümleri denedim ve hiçbir şey yardımcı olmadı. Gerçekten yardımcı olan, dosyaya bir proxy satırı yazmaktı/etc/systemd/system/docker.service.d/https-proxy.conf etki alanı adı olmayan bir .

Onun yerine

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

veya

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

ve diğer bazı değiştirme @ -> %40veya \ -> \\kullanmaya çalıştım

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

Ve şimdi çalışıyor.



0

Bu soruya tam olarak cevap vermez, ancak özellikle servis dosyalarıyla uğraşmak istemiyorsanız yardımcı olabilir.

Görüntüyü barındıran sizseniz, bunun bir yolu görüntüyü sunucuda aşağıdaki gibi bir şey kullanarak bir tar arşivi olarak dönüştürmektir .

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

Arşivi indirin ve tekrar bir görüntüye dönüştürün.

docker load <archive-name>.tar
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.