Docker derlemesi "'archive.ubuntu.com' çözülemedi" apt-get hiçbir şey yükleyemiyor


101

Daha önce çalışan ve artık çalışmayan çeşitli dosyalar üzerinde Docker derlemesini çalıştırmaya çalışıyorum.

Docker dosyası, yazılımın yükleneceği herhangi bir satırı içerdiği anda, paketin bulunamadığını belirten bir mesajla başarısız olur.

RUN apt-get -y install supervisor nodejs npm

Günlüklerde görünen ortak mesaj şuydu:

Could not resolve 'archive.ubuntu.com'

Herhangi bir yazılımın neden kurulmayacağına dair bir fikriniz var mı?


bu, makinenin ağ bağlantısı kesildiğinde gerçekleşecek ... linux dizüstü bilgisayarda yeni bir docker yüklemesiyle gerçekleştiğini gördüm, yalnızca newgrp dockertam bir oturumu kapatmak yerine sorun çıkarsa ve kendime verdikten sonra oturum açarsam sudo usermod -aG docker myuserid... elbette yine de oluyor
Scott Stensland

Yanıtlar:


250

Uncommenting DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"içinde /etc/default/dockerolduğu gibi Matt Taşıyıcı önerdi vermedi DEĞİL benim için çalış. Şirketimin DNS sunucularını da bu dosyaya koymadı. Ancak başka bir yol var (okumaya devam edin).

Öncelikle sorunu doğrulayalım:

$ docker run --rm busybox nslookup google.com   # takes a long time
nslookup: can't resolve 'google.com'   # <--- appears after a long time
Server:    8.8.8.8
Address 1: 8.8.8.8

Komut askıda kalıyor gibi görünüyorsa ancak sonunda "'google.com' çözülemiyor" hatasını veriyorsa, benimle aynı sorunu yaşıyorsunuz demektir.

nslookupKomut bir IP adresine 'google.com' metni adresini açmak için DNS sunucusunu 8.8.8.8 sorgular. İronik olarak, 8.8.8.8 Google'ın genel DNS sunucusudur . Eğer nslookupbaşarısız 8.8.8.8 gibi kamu DNS sunucuları şirketiniz tarafından engellenebilir (Ben güvenlik nedeniyle olduğunu varsayalım).

Sen hiç Şirketinizin DNS sunucularını ekleyerek olduğunu düşünmek istiyorum DOCKER_OPTSin /etc/default/dockerhile yapmak gerekir, ancak herhangi bir nedenle, bu benim için işi yoktu. Aşağıda benim için neyin işe yaradığını anlatıyorum.

ÇÖZÜM :

Ana bilgisayarda (Ubuntu 16.04 kullanıyorum), birincil ve ikincil DNS sunucusu adreslerini bulun:

$ nmcli dev show | grep 'IP4.DNS'
IP4.DNS[1]:              10.0.0.2
IP4.DNS[2]:              10.0.0.3

Bu adresleri kullanarak bir dosya oluşturun /etc/docker/daemon.json :

$ sudo su root
# cd /etc/docker
# touch daemon.json

Bunu koy /etc/docker/daemon.json :

{                                                                          
    "dns": ["10.0.0.2", "10.0.0.3"]                                                                           
}     

Kökten çıkın:

# exit

Şimdi docker'ı yeniden başlatın:

$ sudo service docker restart

DOĞRULAMA :

Şimdi, /etc/docker/daemon.jsondosyayı eklemenin "google.com" u bir IP adresine çözmenize izin verdiğini kontrol edin :

$ docker run --rm busybox nslookup google.com
Server:    10.0.0.2
Address 1: 10.0.0.2
Name:      google.com
Address 1: 2a00:1450:4009:811::200e lhr26s02-in-x200e.1e100.net
Address 2: 216.58.198.174 lhr25s10-in-f14.1e100.net

REFERANSLAR :

Çözümümü, çözüm için tüm övgüyü hak eden Robin Winslow'un bir makalesine dayandırdım. Teşekkürler Robin!

"Docker'ın ağ DNS yapılandırmasını düzeltin." Robin Winslow. Erişim tarihi: 2016-11-09. https://robinwinslow.uk/2016/06/23/fix-docker-networking-dns/


3
Değişikliklerden sonra hizmetin başlatılamadığına dair bir hata aldım. Bunun nedeni / etc / default / docker ve /etc/init.d/docker içindeki DOCKER_OPTS'yi değiştirmiş olmamdı. Değişiklikleri geri almak, docker hizmetinin başlangıç ​​sorununu çözdü
Twiebie

7
Bu benim için çalıştı (bir şirket ağında), ancak kabul edilen çözüm işe yaramadı.
David Ebbo

1
Bu benim için de işe yaradı, ancak kabul edilen çözüm işe yaramadı. DNS sunucusu IP'mi nmcli olmasa da almak için nslookup kullandım.
Necro

2
daemon.json benim için de çalışıyor! Ve şirketinizin nslookup google.com 8.8.8.8connection timed out; no servers could be reached
8.8.8.8'i

3
Sanırım neden /etc/default/dockerbazı insanlar için işe yaramadı (dosyadan bir yorum alıntılayarak)# THIS FILE DOES NOT APPLY TO SYSTEMD
Jakub Bochenski

88

Çok fazla baş ağrısından sonra cevabı buldum. Could not resolve 'archive.ubuntu.com'aşağıdaki değişiklikleri yaparak düzeltilebilir:

  1. Aşağıdaki satırın açıklamasını kaldırın /etc/default/docker
    DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"

  2. Docker hizmetini yeniden başlatın sudo service docker restart

  3. Geçersiz DNS ayarlarını önbelleğe almış tüm resimleri silin.

  4. Yeniden inşa edin ve sorun çözülmelidir.

Kredi Andrew SB'ye gidiyor


7
Ayrıca --no-cache = true ekleyebilirsin, eğer yukarıdaki 3.
maddeyi

8
Bu benim için çalışmıyor ve neden olduğuna dair hiçbir fikrim yok. Haftalardır bununla sürekli mücadele ediyorum.
Corey Ogburn

2
Linux nane üzerinde çalışıyorum, bu yüzden boot2docker yok. / etc / default / docker oluşturulur ve yukarıda DOCKER_OPTS bayrağına sahiptir. Hizmeti yeniden başlattım, tüm görüntüleri ve kapsayıcıları temizledim ama yine de hiçbir şey yok.
Corey Ogburn

2
@CoreyOgburn Ayrıca yukarıda jschorr tarafından belirtildiği gibi --no-cache = true 'yu da deneyeceğim. örn:docker build --no-cache=true ...
Matt Taşıyıcı

6
Koştum docker build --no-cache=true -t docker-whale .ama farklı bir şey olmadı.
Corey Ogburn

47

Aynı problemle karşılaşıyorum, ancak / etc / default / docker dns girişlerini neiter uncommenting ne de build konteynerinde /etc/resolv.conf'u veya /etc/docker/daemon.json bana yardımcı oluyor.

Ama --network = host seçeneğiyle derledikten sonra çözüm yine iyi oldu.

docker build --network=host -t my-own-ubuntu-like-image .

Belki bu yine birine yardımcı olur.


Uzun zamandır farklı bir hata alıyorum "archive.ubuntu.com:80 (xxxx) 'e bağlanılamadı. - bağlan (111: Bağlantı reddedildi)" ve --network = host kullanımının artık düzeltildiğini görüyorum benim sorunum
Eric Arseneau

Tonlarca sorun giderme işleminden sonra, benim için çalışan tek şey bu.
math0ne

15

Matt Carrier'ın cevabının bu sorunun doğru çözümü olduğuna inanıyorum . Ancak, uyguladıktan sonra hala aynı davranışı gözlemledim:could not resolve 'archive.ubuntu.com' .

Bu, sonunda bağlandığım ağın genel DNS'yi engellediğini bulmamı sağladı. Bu sorunun çözümü, Docker konteynerimi ana bilgisayarımın (Docker çalıştırdığım makine) kullandığı ad sunucusunu kullanacak şekilde yapılandırmaktı.

Nasıl triyaj yaptım:

  1. Docker dokümantasyonu üzerinde çalıştığım için, makinemde zaten bir örnek imaj kurdum. Bu görüntüyü çalıştırmak ve bu kapsayıcıda yeni bir bash oturumu oluşturmak için yeni bir kapsayıcı başlatabildim:docker run -it docker/whalesay bash
  2. Konteynerin İnternet bağlantısı var mı ?: ping 172.217.4.238 (google.com)
  3. Kapsayıcı, ana bilgisayar adlarını çözebilir mi? ping google.com

Benim durumumda, birincisi pingyanıtlarla sonuçlandı, ikincisi olmadı.

Nasıl düzelttim:

DNS'nin kapsayıcı içinde çalışmadığını keşfettiğimde, aynı davranışı ana bilgisayarda da kopyalayabileceğimi doğruladım. nslookup google.comana bilgisayarda gayet iyi çözüldü. Ama nslookup google.com 8.8.8.8veyansloookup google.com 8.8.4.4 zaman aşımına uğradı.

Ardından, ana bilgisayarımın kullandığı ad sunucularını ( nm-toolUbuntu 14.04'te) çalıştırarak buldum . Hızlı geribildirim doğrultuda, ben yine örnek imajını başladı ve kabın resolv.conf dosyasına adı sunucusunun IP adresini ekledi: sudo vi /etc/resolv.conf. Kaydedildikten sonra ping'i tekrar denedim (ping google.com ) ve bu sefer işe yaradı!

Lütfen kapsayıcının resolv.conf'unda yapılan değişikliklerin kalıcı olmadığını ve kapsayıcı yeniden başlatıldığında kaybolacağını unutmayın. Benim durumumda daha uygun çözüm, ağımın ad sunucusunun IP adresini ana bilgisayarın /etc/default/dockerdosyasına eklemekti .


2
Adres adı sunucularını almak için somut komutlar: nmcli device show <interfacename> | grep IP4.DNS(Ubuntu> = 15) ve nmcli dev list iface <interfacename> | grep IP4(Ubuntu <15). Kredi: Marty Fried .
r0estir0bbe

Bu daha kapsamlı bir cevap. Ofis ağıma geçerken veya ağ değişiklikleri olduğunda her zaman sorun yaşıyorum. Şirketinizin DNS sunucusunu eklemek, arama sorununu düzeltir.
gvd

1
Çok öğretici! Sorunu nasıl doğrulayacağınızı, ardından bir düzeltmeyi nasıl sağlayacağınızı (ve düzeltmenin çalıştığını doğrulayan) gösteren yanıtlar bulmak nadirdir. Harika sorun giderme!
Matthew Kraus

Hey, bana yardım edebilir misin? Aynı sorunu yaşıyorum ancak ana bilgisayarım, docker konteynerimi çalıştırmaya ve orada Ubuntu görüntüsünü yapılandırmaya çalıştığım bir Windows makinesi. Burada ad sunucusundan bahsettiğinizde, Windows makinemin DNS sunucu adresi mi? Ve bunda da birincil mi yoksa ikincil mi olacak?
CodeHunter

Kuruluşum genel DNS'yi engellediğinden ve kuruluşun DNS'sini DOCKER_OPTS altında / etc / default / docker'da ayarlamak işe yaradı ve sorun çözüldüğünde karşılaştığım tam sorun buydu. Hepsi bu cevabı selamlayın ...
skm

7

Varsayılan docker dosyasına yerel dns ip ekledikten sonra benim için çalışmaya başladı ... lütfen aşağıdaki adımları bulun ...

$ nm-tool # (will give you the dns IP)

DNS: 172.168.7.2

$ vim /etc/default/docker # (uncomment the DOCKER_OPTS and add DNS IP)
DOCKER_OPTS="--dns 172.168.7.2 --dns 8.8.8.8 --dns 8.8.4.4"

$ rm `docker ps --no-trunc -aq` # (remove all the containers to avoid DNS cache)

$ docker rmi $(docker images -q) # (remove all the images)

$ service docker restart #(restart the docker to pick up dns setting)

Şimdi devam edin ve limanı inşa edin ... :)


7

Bu sorunu yaşayan herkes için, sorunumu /etc/default/docker diğer yanıtlar ve sorularda önerildiği gibi dosyayı çözdüm. Ancak DNS olarak hangi IP'yi kullanacağım konusunda hiçbir fikrim yoktu.

Ancak bir süre sonra ifconfig docker, docker ağ arabirimi için IP'yi göstermek için ana bilgisayarda çalışmam gerektiğini anladım .

docker0   Link encap:Ethernet  Endereço de HW 02:42:69:ba:b4:07  
          inet end.: 172.17.0.1  Bcast:0.0.0.0  Masc:255.255.0.0
          endereço inet6: fe80::42:69ff:feba:b407/64 Escopo:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Métrica:1
          pacotes RX:8433 erros:0 descartados:0 excesso:0 quadro:0
          Pacotes TX:9876 erros:0 descartados:0 excesso:0 portadora:0
          colisões:0 txqueuelen:0 
          RX bytes:484195 (484.1 KB) TX bytes:24564528 (24.5 MB)

Öyleydi 172.17.0.1benim durumumda. Umarım bu, bu sorunu yaşayan herkese yardımcı olur.


7
Docker

1
Ubuntu 18.04'te:ifconfig docker0
automorphic

6

Bu cevabı buldum bazı Googleing sonra. Windows kullanıyorum, bu nedenle yukarıdaki yanıtlardan bazıları dosya sistemim için geçerli değildi.

Temelde çalıştırın:

docker-machine ssh default
echo "nameserver 8.8.8.8" > /etc/resolv.conf

8.8.8.8İnanıyorum ki kullanılan mevcut ad sunucusunun üzerine yazıyor . Benim için çalıştı!

Bazı yorumlara göre, kök olmanız gerekebilir. Bunu yapmak için sorun sudo -i.


Bu benim için Windows 10'da çalışmadı, çünkü sshmevcut değil mi?
Seanny123

@ Seanny123 bununla bir şey yapmayalı uzun zaman oldu, ama ben de Windows 10'daydım. O sırada eski Docker Toolbox kullanıyor olabilir miyim ? Aksi takdirde , Windows SSH İstemcisini etkinleştirmeniz gerekebilir . Muhtemelen bununla başlarım.
Engineero

1
Bunu yapmak, kök olduktan sonra bu benim için sorun çalıştı sudo -ikez sen are
MediaVince

5

Arama motorlarından bu sorunla karşılaşan herkes için geç yanıt eklemek istedim.

Bunu YAPMAYIN: Eskiden / etc / default / docker içinde ayarlamak için bir seçeneğim vardı iptables=false. Bunun nedeni ufw'nin çalışmamasıydı (sadece 3 bağlantı noktasına izin verilmesine rağmen her şey açılmıştı), bu yüzden bu sorunun cevabını körü körüne takip ettim: Komplike Olmayan Güvenlik Duvarı (UFW) Docker'ı kullanırken hiçbir şeyi engellemiyor ve bu, yorumlar

Genel olarak iptables kuralları / nat / yönlendirme hakkında çok az bilgim var, bu yüzden neden irrasyonel bir şey yapmış olabilirim.

Muhtemelen yanlış yapılandırdığım ve kapsayıcılarımın içindeki DNS çözümlemesini öldürdüğüm ortaya çıktı. Etkileşimli bir konteyner terminali çalıştırdığımda:docker run -i -t ubuntu:14.04 /bin/bash

Şu sonuçları aldım:

root@6b0d832700db:/# ping google.com
ping: unknown host google.com

root@6b0d832700db:/# cat /etc/resolv.conf
search online.net
nameserver 8.8.8.8
nameserver 8.8.4.4

root@6b0d832700db:/# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=56 time=1.76 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=56 time=1.72 ms

Tüm ufw yapılandırmamı (before.rules) geri döndürmek, ufw'u devre dışı bırakmak ve iptables = false'u / etc / default / docker'dan kaldırmak, kapsayıcıların DNS çözümleme işlevini geri yükledi.

Şimdi bunun yerine bu talimatları izleyerek ufw işlevini yeniden etkinleştirmek için sabırsızlanıyorum .


3

Aynı sorunu yaşıyorum ve belirtilen adımları denedim, ancak ağ ayarlarını yenileyene kadar hiçbiri çalışmıyor gibi görünüyor.

Adımlar:

  1. Belirtildiği gibi, eklemek DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4 --ip-masq=true"için /etc/default/docker.
  2. PREROUTING tablosu içeriğini iptables -t nat -F POSTROUTING. Bunu çalıştırdıktan sonra, docker'ı yeniden başlatın ve nat tablosunu yeni IP aralığı ile başlatacaktır.

3

Benim için aynı sorun (Ubuntu Xenial'de).

  • docker run --dns ... konteynerler için çalıştı.
  • Docker daemon seçeneklerini güncelleme docker build(docker-compose vb.) İşe yaramadı.

journalctl -u docker.serviceDocker loglarını ( ) analiz ettikten sonra, uygulanan kötü resolvconf hakkında bir uyarı bulunursa.

Bunu takiben kurumsal ad sunucularımızın ağ arayüzlerine eklendiğini, ancak resolvconf'ta olmadığını buldum.

Bu çözüm uygulandı Statik DNS'mi arabirimlerde nasıl yapılandırabilirim? (askubuntu) , yani ad sunucularını eklemek/etc/resolvconf/resolv.conf.d/tail

Resolvconf'u güncelledikten sonra (veya yeniden başlattıktan sonra).

bash docker run --rm busybox nslookup google.com

anında çalıştı.

Tüm docker-compose yapılarım şimdi çalışıyor.


2

Bugün de aynı sorunu yaşıyorum, aşağıdaki satırı / etc / default / docker'a ekledim

DOCKER_OPTS="--dns 172.18.20.13 --dns 172.20.100.29 --dns 8.8.8.8"

ve sonra Dizüstü Bilgisayarımı yeniden başlattım.

Benim durumumda docker daemon'u yeniden başlatmak benim için yeterli değil, çalışmasını sağlamak için Dizüstü Bilgisayarımı yeniden başlatmam gerekiyor.


2

Diğer çözümlerden herhangi biri üzerinde çok fazla zaman harcamadan önce, Docker'ı yeniden başlatmanız ve tekrar denemeniz yeterlidir .

Windows 10'da Windows için Docker Desktop'ı kullanarak sorunu benim için çözdüm.


Yönetici haklarıyla yeniden başlatmak benim durumumdaki sorunu çözdü.
damar

2

Ben de bir süredir bununla mücadele ettim, ama burada benim için çözen şey buydu Ubuntu 16.04 x64. Umarım birisinin de zamanını kurtarır.

  1. Giriş /etc/NetworkManager/NetworkManager.conf: açıklama #dns=dnsmasq

  2. Oluşturun (veya değiştirin) /etc/docker/daemon.json:

{
    "dns": ["8.8.8.8"]
}
  1. Docker'ı şununla yeniden başlatın: sudo service docker restart


Aslında değil. NetworkManager.conf dosyasındaki düzeltme durumum için bir fark yarattı.
palamunder


Bu problemle 2 gün mücadele ettikten sonra benim için neyin işe yaradığını paylaşıyorum.
palamunder

0

Sistemimde ( macOS High Sierra 10.13.6ile Docker 2.1.0.1) bunun nedeni kurumsal bir proxy idi.

Bunu iki adımda çözdüm:

  1. Proxy ayarlarını el ile yapılandırın Preferences>Proxies
  2. Aynı ayarları aşağıdaki ~/.docker/config.jsongibi config.json dosyanıza ekleyin :

     "proxies":
    {
      "default":
      {
        "httpProxy": "MYPROXY",
        "httpsProxy": "MYPROXY",
        "noProxy": "MYPROXYWHITELIST"
      }
    }
    
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.