डॉकर बिल्ड "आर्काइव.बंटू डॉट कॉम 'को हल नहीं कर सका" "कुछ भी स्थापित करने में विफल हो जाता है


101

मैं विभिन्न फाइलों पर डॉकर बिल्ड को चलाने की कोशिश कर रहा हूं, जो पहले काम करती थी, जो अब काम नहीं कर रही हैं।

जैसे ही डॉकर फ़ाइल में कोई भी लाइन शामिल होती है जो सॉफ़्टवेयर स्थापित करने के लिए होती है, यह संदेश के साथ विफल हो जाएगी कि पैकेज नहीं मिला।

RUN apt-get -y install supervisor nodejs npm

आम संदेश जो लॉग में दिखाया गया था

Could not resolve 'archive.ubuntu.com'

किसी भी विचार क्यों किसी भी सॉफ्टवेयर स्थापित नहीं होगा?


ऐसा तब होगा जब मशीन नेट से डिस्कनेक्ट हो जाती है ... मैंने देखा है कि लिनक्स लैपटॉप पर एक नए डॉकटर इंस्टॉल के साथ होता है अगर मैं केवल newgrp dockerएक पूर्ण लॉग ऑफ करने के बजाय जारी करता हूं तो खुद को देने के बाद लॉगिन करें sudo usermod -aG docker myuserid... इसका एक किनारे का मामला हालाँकि यह ज़रूर होता है
स्कॉट स्टेंसलैंड

जवाबों:


250

मैट कैरियर के रूप DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"में सुझाव देना मेरे लिए कारगर नहीं था । और न ही मेरे निगम के DNS सर्वरों को उस फाइल में डाला। लेकिन, इसका एक और तरीका है (पढ़ें)।/etc/default/docker

सबसे पहले, आइए समस्या का सत्यापन करें:

$ 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

यदि कमांड लटका हुआ दिखाई देता है, लेकिन अंततः "google.com 'को हल नहीं कर सकता है" तो आप मेरे जैसी ही समस्या है।

nslookupआदेश आदेश को IP पते में 'google.com' के पाठ का पता करने के लिए बारी में डीएनएस सर्वर 8.8.8.8 प्रश्नों। विडंबना यह है कि 8.8.8.8 Google का सार्वजनिक DNS सर्वर है । यदि nslookupविफल रहता है, तो सार्वजनिक DNS सर्वर जैसे 8.8.8.8 आपकी कंपनी द्वारा अवरुद्ध किया जा सकता है (जो मुझे लगता है कि सुरक्षा कारणों से है)।

आपको लगता है कि चाहते हैं कि करने के लिए अपनी कंपनी के डीएनएस सर्वर को जोड़ने DOCKER_OPTSमें /etc/default/dockerचाल करना चाहिए, लेकिन जो भी कारण के लिए, यह मेरे लिए काम नहीं किया। मैं वर्णन करता हूं कि मेरे लिए नीचे क्या काम किया गया था।

समाधान :

होस्ट पर (मैं Ubuntu 16.04 का उपयोग कर रहा हूं), प्राथमिक और द्वितीयक DNS सर्वर पते का पता लगाएं:

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

इन पतों का उपयोग करके, एक फ़ाइल बनाएँ /etc/docker/daemon.json:

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

इसे इसमें डालें /etc/docker/daemon.json:

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

रूट से बाहर निकलें:

# exit

अब पुनः आरंभ करें:

$ sudo service docker restart

सत्यापन :

अब जांचें कि /etc/docker/daemon.jsonफ़ाइल जोड़ने से आप 'google.com' को एक आईपी पते में हल कर सकते हैं:

$ 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

संदर्भ :

मैंने रॉबिन विंसलो के एक लेख पर अपना समाधान आधारित किया, जो समाधान के लिए सभी श्रेय के हकदार हैं। धन्यवाद, रॉबिन!

"डॉकर्स नेटवर्किंग DNS कॉन्फिगर को ठीक करें।" रॉबिन विंसलो। 2016-11-09 को लिया गया। https://robinwinslow.uk/2016/06/23/fix-docker-networking-dns/


3
मुझे एक त्रुटि मिली, कि परिवर्तन के बाद सेवा शुरू नहीं की जा सकती। ऐसा इसलिए था क्योंकि मैंने DOCKER_OPTS को / etc / default / docker और /etc/init.d/docker में संशोधित किया था। परिवर्तनों को पुनः प्राप्त करते हुए
docker

7
यह मेरे लिए (एक कंपनी नेटवर्क पर) काम करता था जबकि स्वीकृत समाधान नहीं था।
डेविड एबो

1
यह मेरे लिए भी काम किया जबकि स्वीकृत समाधान नहीं था। मैंने nscup का उपयोग अपने DNS सर्वर IP को प्राप्त करने के लिए किया, हालांकि nmcli नहीं।
नेक्रो

2
daemon.json मेरे लिए भी काम करता है! और आप जांच सकते हैं कि क्या आपकी कंपनी ने इस आदेश द्वारा 8.8.8.8 को अवरुद्ध कर दिया है nslookup google.com 8.8.8.8मेरे मामले में तो मुझे यह त्रुटि मिली हैconnection timed out; no servers could be reached
ROTOGG

3
मुझे लगता है कि कारण /etc/default/dockerकुछ लोगों के लिए काम नहीं कर रहा है (फ़ाइल से एक टिप्पणी उद्धृत करते हुए)# THIS FILE DOES NOT APPLY TO SYSTEMD
जैकब बोचेंस्की

88

बहुत सिरदर्द के बाद मुझे जवाब मिला। Could not resolve 'archive.ubuntu.com'निम्नलिखित परिवर्तन करके तय किया जा सकता है:

  1. निम्नलिखित लाइन को अनचेक करें /etc/default/docker
    DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"

  2. डॉकर सेवा को पुनरारंभ करें sudo service docker restart

  3. अमान्य DNS सेटिंग्स को कैश किया गया कोई भी चित्र हटाएं।

  4. फिर से निर्माण करें और समस्या को हल किया जाना चाहिए।

इसका श्रेय एंड्रयू एसबी को जाता है


7
आप भी जोड़ सकते हैं -कोई-कैश = सच है यदि आप ऊपर # 3 नहीं करेंगे
jschorr

8
यह मेरे लिए काम नहीं कर रहा है और मुझे पता नहीं क्यों। मैं हफ्तों से इस पर और लड़ रहा हूं।
कोरी ओगबर्न

2
मैं Linux टकसाल पर चल रहा हूँ ताकि कोई boot2docker न हो। / etc / डिफ़ॉल्ट / docker बनाया गया है और ऊपर DOCKER_OPTS ध्वज है। मैंने सेवा को फिर से शुरू कर दिया है, सभी छवियों और कंटेनरों को साफ कर दिया है लेकिन फिर भी कुछ भी नहीं है।
कोरी ओगबर्न

2
@CoreyOgburn मैं भी -no-cache की कोशिश करूँगा = जैसा कि jschorr द्वारा ऊपर बताया गया है। उदाहरण के लिए:docker build --no-cache=true ...
मैट कैरियर

6
मैं भागा, docker build --no-cache=true -t docker-whale .लेकिन कुछ भी अलग नहीं हुआ लगता है।
कोरी ओगबर्न

46

मैं एक ही समस्या में भागता हूं, लेकिन नीयर अनकंफर्टिंग / etc / default / docker प्रविष्टियाँ बनाता है और न ही निर्माण कंटेनर में /etc/resolv.conf संपादन या /etc/docker/daemon.json मेरी मदद करता है।

लेकिन मैं विकल्प के साथ निर्माण के बाद - नेटवर्क = होस्ट को हल करना फिर से ठीक था।

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

शायद यह फिर से किसी की मदद करेगा।


मुझे लंबे समय से एक अलग त्रुटि मिल रही है "आर्काइव से कनेक्ट नहीं कर पा रहा था ।ubuntu.com:80 (xxxx) मेरी समस्या
एरिक आर्सेन्यू

टन के समस्या निवारण के बाद यह एकमात्र ऐसी चीज है जो मेरे लिए काम करती है।
math0ne

15

मेरा मानना ​​है कि मैट कैरियर का जवाब इस समस्या का सही समाधान है। हालांकि, इसे लागू करने के बाद, मैंने अभी भी उसी व्यवहार को देखा could not resolve 'archive.ubuntu.com':।

इससे मुझे अंततः पता चला कि मैं जिस नेटवर्क से जुड़ा था, वह सार्वजनिक DNS को अवरुद्ध कर रहा था। इस समस्या का समाधान मेरे डॉकटर कंटेनर को उसी नाम सर्वर का उपयोग करने के लिए कॉन्फ़िगर करना था जो कि मेरा होस्ट (जिस मशीन से मैं डॉकर चला रहा था) का उपयोग कर रहा था।

मैंने कैसे तिकड़म किया:

  1. चूंकि मैं डॉकर प्रलेखन के माध्यम से काम कर रहा था, इसलिए मेरे पास पहले से ही एक उदाहरण छवि थी जो मेरी मशीन पर स्थापित थी। मैं उस छवि को चलाने और उस कंटेनर में एक नया बैश सत्र बनाने के लिए एक नया कंटेनर शुरू करने में सक्षम था:docker run -it docker/whalesay bash
  2. क्या कंटेनर में इंटरनेट कनेक्शन है ?: ping 172.217.4.238(google.com)
  3. क्या कंटेनर होस्टनाम को हल कर सकता है? ping google.com

मेरे मामले में, पहली pingप्रतिक्रिया में हुई, दूसरी नहीं हुई।

मैंने कैसे तय किया:

एक बार जब मुझे पता चला कि डीएनएस कंटेनर के अंदर काम नहीं कर रहा है, तो मैंने सत्यापित किया कि मैं मेजबान पर समान व्यवहार की नकल कर सकता हूं। nslookup google.comमेजबान पर ठीक हल। लेकिन, nslookup google.com 8.8.8.8या nsloookup google.com 8.8.4.4समय समाप्त हो गया।

इसके बाद, मैंने नाम सर्वर (ओं) को पाया, जिसे मेरा होस्ट रनिंग nm-tool(Ubuntu 14.04 पर) द्वारा उपयोग कर रहा था । तेजी से प्रतिक्रिया की नस में, मैंने फिर से उदाहरण छवि को शुरू किया, और नाम सर्वर के आईपी पते को कंटेनर की resolv.conf फ़ाइल में जोड़ा sudo vi /etc/resolv.conf:। एक बार बचाने के बाद, मैंने फिर से पिंग करने का प्रयास किया ( ping google.com) और इस बार इसने काम किया!

कृपया ध्यान दें कि कंटेनर के resolv.conf में किए गए परिवर्तन लगातार नहीं हैं और कंटेनर पुनरारंभ के दौरान खो जाएंगे। मेरे मामले में, मेरे नेटवर्क के नाम सर्वर के आईपी पते को होस्ट की /etc/default/dockerफ़ाइल में जोड़ने के लिए अधिक उपयुक्त समाधान था ।


2
पतों के नाम सर्वर प्राप्त करने के लिए ठोस आदेश: nmcli device show <interfacename> | grep IP4.DNS(Ubuntu> = 15) और nmcli dev list iface <interfacename> | grep IP4(Ubuntu <15)। क्रेडिट: मार्टी फ्राइड
r0estir0bbe

यह अधिक व्यापक उत्तर है। मेरे पास हमेशा ऐसे मुद्दे होते हैं जब मैं अपने कार्यालय नेटवर्क पर स्विच करता हूं या जब नेटवर्क परिवर्तन होते हैं। आपकी कंपनी का DNS सर्वर जोड़ने से लुकअप समस्या ठीक हो जाती है।
जी.वी.डी.

1
बहुत ही निर्देशात्मक! यह उत्तर खोजना दुर्लभ है जो आपको समस्या को सत्यापित करने का तरीका दिखाता है, फिर एक फिक्स प्रदान करें (और फिक्स कार्यों को सत्यापित करें)। महान समस्या निवारण!
मैथ्यू Kraus

अरे, क्या आप मेरी मदद कर सकते हैं? मैं एक ही मुद्दा रहा हूँ, लेकिन मेरा मेजबान एक विंडोज़ मशीन है जहाँ मैं अपने डॉकटर कंटेनर को चलाने की कोशिश कर रहा हूँ और उबंटू की छवि को कॉन्फ़िगर करने की कोशिश कर रहा हूँ। जब आप यहाँ नाम सर्वर की बात करते हैं, तो क्या इसका मतलब है मेरी विंडोज़ मशीन का डीएनएस सर्वर पता? और उसमें भी, यह प्राथमिक एक होगा या द्वितीयक?
कोडहंटर

मेरे संगठन द्वारा सार्वजनिक DNS को अवरोधित करने और DOCKER_OPTS के तहत संगठन के DNS को / etc / default / docker में सेट करने और समस्या हल करने के दौरान यह सटीक समस्या है। सभी इस जवाब का विरोध करते हैं ...
skm

7

डिफ़ॉल्ट डीएसके फ़ाइल में स्थानीय डीएनएस आईपी जोड़ने के बाद यह मेरे लिए काम करना शुरू कर दिया ... कृपया नीचे दिए गए चरणों का पता लगाएं ...

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

अब आगे बढ़ें और निर्माण करें ... :)


7

जिस किसी को भी यह समस्या हो रही है, उसके लिए मैंने संपादन करके अपनी समस्या हल कर ली है /etc/default/docker फ़ाइल का , जैसा कि अन्य उत्तरों और प्रश्नों द्वारा सुझाया गया है। हालाँकि मुझे पता नहीं था कि DNS के रूप में किस IP का उपयोग करना है।

यह कुछ समय के बाद ही मुझे लगा कि मुझे ifconfig dockerहोस्ट करने के लिए डॉक नेटवर्क इंटरफेस के लिए आईपी दिखाना है।

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)

यह 172.17.0.1मेरे मामले में था । आशा है कि यह किसी को भी जो इस मुद्दे पर है मदद करता है।


7
यदि आपने अपनी
डॉक

1
उबंटू 18.04 पर:ifconfig docker0
ऑटोमोफिक

6

मुझे यह उत्तर मिला कुछ Googleing के बाद । मैं विंडोज का उपयोग कर रहा हूं, इसलिए उपरोक्त कुछ उत्तर मेरे फाइल सिस्टम पर लागू नहीं हुए।

मूल रूप से चलाएं:

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

जो 8.8.8.8कि मेरे विश्वास के साथ उपयोग किए गए मौजूदा नेमवर को ओवरराइट करता है। यह मेरे लिए काम किया!

कुछ टिप्पणियों के आधार पर, आपको मूल होना पड़ सकता है। ऐसा करने के लिए, जारी करें sudo -i


यह विंडोज 10 पर मेरे लिए काम नहीं किया, क्योंकि sshमौजूद नहीं है?
Seanny123

@ Seanny123 यह एक समय हो गया है क्योंकि मैंने इसके साथ कुछ भी किया है, लेकिन मैं विंडोज 10 पर भी था। मैं उस समय पुराने डॉकर टूलबॉक्स का उपयोग कर रहा होगा ? अन्यथा आपको Windows SSH क्लाइंट को सक्षम करने की आवश्यकता हो सकती है । मैं शायद उसी के साथ शुरू करूँगा।
इंजिनियरो

1
मेरे रूट हो जाने के बाद मेरे लिए यह काम कर गया, ऐसा करने के लिए, sudo -iएक बार जब आप जारी करते हैं
MediaVince

5

मैं बस खोज इंजन से इस मुद्दे पर आने वाले किसी भी व्यक्ति के लिए देर से प्रतिक्रिया जोड़ना चाहता था।

ऐसा न करें: मैं सेट करने के लिए / etc / default / docker में एक विकल्प रखता था iptables=false। ऐसा इसलिए था क्योंकि ufw काम नहीं करता था (सब कुछ केवल 3 पोर्ट की अनुमति के बावजूद खोला गया था) इसलिए मैंने आँख बंद करके इस प्रश्न के उत्तर का पालन किया: डॉकटर और इस का उपयोग करते समय Uncomplicated Firewall (UFW) कुछ भी ब्लॉक नहीं कर रहा है , जिसे लिंक किया गया था टिप्पणियाँ

मुझे सामान्य रूप से iptables नियमों / नेट / रूटिंग की बहुत कम समझ है, इसलिए शायद मैंने कुछ तर्कहीन किया हो।

यह पता चला है कि मैंने शायद इसे गलत बताया है और अपने कंटेनरों के अंदर डीएनएस रिज़ॉल्यूशन को मार दिया है। जब मैंने एक इंटरैक्टिव कंटेनर टर्मिनल चलाया:docker run -i -t ubuntu:14.04 /bin/bash

मेरे पास ये परिणाम थे:

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

मेरे सभी ufw कॉन्फ़िगरेशन (पहले .rules) को वापस करना, ufw को अक्षम करना और iptables = को / से / झूठी / डिफ़ॉल्ट / डॉक से हटाना कंटेनरों के DNS रिज़ॉल्यूशन की कार्यक्षमता को पुनर्स्थापित करता है।

मैं अब इन निर्देशों का पालन ​​करके ufw कार्यक्षमता को फिर से सक्षम करने के लिए तत्पर हूं ।


3

मेरे पास एक ही मुद्दा है, और वर्णित चरणों की कोशिश की, लेकिन लगता है कि नेटवर्क सेटिंग्स को ताज़ा करने तक कोई काम नहीं करता है।

कदम:

  1. जैसा कि बताया जा जोड़ने DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4 --ip-masq=true"के लिए /etc/default/docker
  2. मैन्युअल रूप से तालिका सामग्री का उपयोग कर फ्लश iptables -t nat -F POSTROUTING। इसे चलाने के बाद, do पुनः आरंभ करें और यह nat टेबल को नए IP रेंज के साथ आरंभ करेगा।

3

मेरे लिए एक ही मुद्दा (उबंटू ज़ेनियल पर)।

  • docker run --dns ... कंटेनरों के लिए काम किया।
  • docker build(Docker- रचना आदि) के लिए docker डेमन विकल्प को अपडेट करने से काम नहीं चला।

journalctl -u docker.serviceडॉक लॉग्स का विश्लेषण करने के बाद ( ) यदि खराब रेज़ोल्वॉन्क के बारे में कुछ चेतावनी लागू होती है।

इसके बाद मैंने पाया कि हमारे कॉर्पोरेट नेमसर्वर्स को नेटवर्क इंटरफेस में जोड़ा गया था, लेकिन रिज़ॉल्वॉन्फ़ में नहीं।

इस समाधान को लागू किया मैं अपने स्थिर DNS को इंटरफेस में कैसे कॉन्फ़िगर करूं? (askubuntu) , यानी नेमसर्वर को जोड़ने के लिए/etc/resolvconf/resolv.conf.d/tail

Resolvconf (या रिबूट) को अपडेट करने के बाद।

bash docker run --rm busybox nslookup google.com

तुरन्त काम किया।

मेरे सभी डॉकटर-कंपोज़ बिल्ड अब काम कर रहे हैं।


2

मुझे आज एक ही मुद्दा मिला, मैंने सिर्फ / etc / default / docker के नीचे लाइन जोड़ी

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

और फिर मैंने अपना लैपटॉप रीस्टार्ट किया।

मेरे मामले में डॉकटर डेमॉन को फिर से शुरू करना मेरे लिए पर्याप्त नहीं है, मुझे इसे काम करने के लिए अपने लैपटॉप को पुनरारंभ करना होगा।


2

किसी भी अन्य समाधान पर बहुत अधिक समय बिताने से पहले, बस डॉकर को पुनः आरंभ करें और प्रयास करें।

विंडोज 10 पर विंडोज के लिए डॉकर डेस्कटॉप का उपयोग करके मेरे लिए समस्या का समाधान किया।


व्यवस्थापक अधिकारों के साथ इसे पुनरारंभ करने से मेरे मामले में समस्या हल हो गई।
नस

1

मैंने इसके साथ ही कुछ समय के लिए संघर्ष किया है, लेकिन यहाँ वह है जो मेरे लिए इसे हल करता है Ubuntu 16.04 x64। मुझे आशा है कि यह किसी का समय बचाता है, भी।

  1. में /etc/NetworkManager/NetworkManager.conf: बाहर कमेंट करो #dns=dnsmasq

  2. बनाएं (या संशोधित करें) /etc/docker/daemon.json:

{
    "dns": ["8.8.8.8"]
}
  1. कर्ता को पुनः आरंभ करें: sudo service docker restart

के रूप में ही समाधान लगता है stackoverflow.com/a/40516974/2308683
OneCricketeer

असल में नहीं। NetworkManager.conf में ठीक होने से मेरे मामले में फर्क पड़ा।
पालमुंडेर

मुझे अत्यधिक संदेह है कि dnsmasq system को निष्क्रिय करना विशेष रूप से Docker के लिए सबसे अच्छा समाधान है
OneCricketeer

मैं इस समस्या से 2 दिन लड़ने के बाद मेरे लिए जो काम कर रहा था, उसे साझा कर रहा हूं।
पालमुंडेर

यह मेरे लिए काम नहीं किया
desmond13

0

(अपने सिस्टम पर macOS High Sierra 10.13.6के साथ Docker 2.1.0.1) इस कॉरपोरेट प्रॉक्सी के कारण था।

मैंने इसे दो चरणों में हल किया है:

  1. में मैन्युअल रूप से प्रॉक्सी सेटिंग्स कॉन्फ़िगर करें Preferences>Proxies
  2. अपने config.json में समान सेटिंग जोड़ें ~/.docker/config.jsonजैसे:

     "proxies":
    {
      "default":
      {
        "httpProxy": "MYPROXY",
        "httpsProxy": "MYPROXY",
        "noProxy": "MYPROXYWHITELIST"
      }
    }
    
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.