डॉकर कंटेनर उबंटू 14.04 डेस्कटॉप होस्ट पर DNS को हल नहीं कर सकते हैं


48

मैं Ubuntu 14.04 LTS पर अपने डॉकर कंटेनर के साथ एक समस्या में चल रहा हूं। डॉकर ने दो दिनों तक ठीक काम किया, और फिर अचानक मैंने अपने कंटेनरों के अंदर सभी नेटवर्क कनेक्टिविटी खो दी। नीचे दिए गए त्रुटि आउटपुट मुझे शुरू में यह विश्वास करने के लिए प्रेरित करते हैं कि यह उपयुक्त था क्योंकि IPv6 के माध्यम से DNS को हल करने की कोशिश की जा रही है।

मैंने अपने होस्ट मशीन पर IPv6 को अक्षम कर दिया और फिर भी, सभी छवियों को हटा दिया, बेस ubuntu को खींच लिया, और फिर भी समस्या में भाग गया।

मैंने अपने स्थानीय DNS सर्वर से Google के सार्वजनिक DNS सर्वर (8.8.8.8 और 8.8.4.4) में अपने /etc/resolve.conf नेमसर्वर को बदल दिया और अभी भी कोई भाग्य नहीं है। मैंने DNS / Google को DOCKER_OPTS / etc / default / docker और पुनरारंभ docker में भी सेट किया।

मैंने कोर को खींचने की भी कोशिश की, और yum DNS को हल नहीं कर सका।

यह अजीब है क्योंकि DNS काम नहीं करता है, फिर भी मुझे एक प्रतिक्रिया मिलती है जब मैं उसी अपडेट सर्वर को पिंग करता हूं जो apt-get को हल नहीं कर सकता है।

मैं एक प्रॉक्सी के पीछे नहीं हूं, मैं एक बहुत ही मानक स्थानीय नेटवर्क पर हूं, और उबंटू का यह संस्करण अद्यतित और ताज़ा है (मैंने दो दिन पहले स्थापित किया था जो डॉकटर के करीब है)।

मैंने स्टैकओवरफ्लो और गितुब मुद्दों पर अन्य पोस्ट के माध्यम से इस पर गहन शोध किया है, लेकिन कोई संकल्प नहीं मिला है। मैं विचारों से बाहर हूं कि इस समस्या को कैसे हल किया जाए, क्या कोई मदद कर सकता है?

त्रुटि संदेश

➜  arthouse git:(docker) ✗ docker build --no-cache .
Sending build context to Docker daemon 51.03 MB
Sending build context to Docker daemon 
Step 0 : FROM ubuntu:14.04
 ---> 5506de2b643b
Step 1 : RUN apt-get update
 ---> Running in 845ae6abd1e0
Err http://archive.ubuntu.com trusty InRelease
Err http://archive.ubuntu.com trusty-updates InRelease
Err http://archive.ubuntu.com trusty-security InRelease   
Err http://archive.ubuntu.com trusty-proposed InRelease  
Err http://archive.ubuntu.com trusty Release.gpg
  Cannot initiate the connection to archive.ubuntu.com:80 (2001:67c:1360:8c01::19). - connect (101: Network is unreachable) [IP: 2001:67c:1360:8c01::19 80]
Err http://archive.ubuntu.com trusty-updates Release.gpg
  Cannot initiate the connection to archive.ubuntu.com:80 (2001:67c:1360:8c01::19). - connect (101: Network is unreachable) [IP: 2001:67c:1360:8c01::19 80]
Err http://archive.ubuntu.com trusty-security Release.gpg
  Cannot initiate the connection to archive.ubuntu.com:80 (2001:67c:1360:8c01::19). - connect (101: Network is unreachable) [IP: 2001:67c:1360:8c01::19 80]
Err http://archive.ubuntu.com trusty-proposed Release.gpg
  Cannot initiate the connection to archive.ubuntu.com:80 (2001:67c:1360:8c01::19). - connect (101: Network is unreachable) [IP: 2001:67c:1360:8c01::19 80]
Reading package lists...
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty/InRelease  
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty-updates/InRelease  
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty-security/InRelease  
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty-proposed/InRelease  
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty/Release.gpg  Cannot initiate the connection to archive.ubuntu.com:80 (2001:67c:1360:8c01::19). - connect (101: Network is unreachable) [IP: 2001:67c:1360:8c01::19 80]
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty-updates/Release.gpg  Cannot initiate the connection to archive.ubuntu.com:80 (2001:67c:1360:8c01::19). - connect (101: Network is unreachable) [IP: 2001:67c:1360:8c01::19 80]
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty-security/Release.gpg  Cannot initiate the connection to archive.ubuntu.com:80 (2001:67c:1360:8c01::19). - connect (101: Network is unreachable) [IP: 2001:67c:1360:8c01::19 80]
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty-proposed/Release.gpg  Cannot initiate the connection to archive.ubuntu.com:80 (2001:67c:1360:8c01::19). - connect (101: Network is unreachable) [IP: 2001:67c:1360:8c01::19 80]
W: Some index files failed to download. They have been ignored, or old ones used instead.

कंटेनर IFCONFIG / पिंग

➜  code  docker run -it ubuntu /bin/bash
root@7bc182bf87bb:/# ifconfig
eth0      Link encap:Ethernet  HWaddr 02:42:ac:11:00:04  
          inet addr:172.17.0.4  Bcast:0.0.0.0  Mask:255.255.0.0
          inet6 addr: fe80::42:acff:fe11:4/64 Scope:Link
          UP BROADCAST RUNNING  MTU:1500  Metric:1
          RX packets:7 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:738 (738.0 B)  TX bytes:648 (648.0 B)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

root@7bc182bf87bb:/# ping google.com
PING google.com (74.125.226.0) 56(84) bytes of data.
64 bytes from lga15s42-in-f0.1e100.net (74.125.226.0): icmp_seq=1 ttl=56 time=12.3 ms
--- google.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 12.367/12.367/12.367/0.000 ms
root@7bc182bf87bb:/# 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=44 time=21.8 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=44 time=21.7 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=44 time=21.7 ms

इसके अलावा, जब मैं IPv4 को लागू करता हूं तो एप-गेट अपडेट विफल हो जाता है:

root@6d925cdf84ad:/# sudo apt-get update -o Acquire::ForceIPv4=true
Err http://archive.ubuntu.com trusty InRelease

Err http://archive.ubuntu.com trusty-updates InRelease

Err http://archive.ubuntu.com trusty-security InRelease

Err http://archive.ubuntu.com trusty-proposed InRelease

Err http://archive.ubuntu.com trusty Release.gpg
  Unable to connect to archive.ubuntu.com:http: [IP: 91.189.88.153 80]
Err http://archive.ubuntu.com trusty-updates Release.gpg
  Unable to connect to archive.ubuntu.com:http: [IP: 91.189.88.153 80]
Err http://archive.ubuntu.com trusty-security Release.gpg
  Unable to connect to archive.ubuntu.com:http: [IP: 91.189.88.153 80]
Err http://archive.ubuntu.com trusty-proposed Release.gpg
  Unable to connect to archive.ubuntu.com:http: [IP: 91.189.88.153 80]
Reading package lists... Done
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty/InRelease  

मेरे लिए, यह एक पुनरारंभ के बाद काम किया।
ssi-aik

जवाबों:


63

वू, मुझे जीथब पर एक पोस्ट मिली जिसने मेरी समस्या हल कर दी।

बाद स्टीव के। ने बताया कि यह वास्तव में एक DNS मुद्दा नहीं था और एक कनेक्टिविटी मुद्दा था, मैं github पर एक पोस्ट ढूंढने में सक्षम था, जिसमें बताया गया था कि इस समस्या को कैसे ठीक किया जाए।

जाहिर तौर पर docker0 नेटवर्क ब्रिज को लटका दिया गया था। पुल-बर्तनों को स्थापित करना और निम्नलिखित काम करना मेरे डॉकटर को काम करने के क्रम में मिला:

apt-get install bridge-utils
pkill docker
iptables -t nat -F
ifconfig docker0 down
brctl delbr docker0
service docker restart

1
आपको अपनी छवियों को खंडन करने की आवश्यकता नहीं है। resolv.conf हर बार जब आप नया कंटेनर चलाते हैं तो उत्पन्न होता है। इसलिए आपको पुराने कंटेनर को हटाने और एक और शुरू करने की आवश्यकता है। मैं कल इस समस्या को हल किया गया था। इसके अलावा, यदि आप कॉर्पोरेट इंट्रानेट में हैं, तो आप --dns-search = your.company.domain को docker daemon / in / etc / default / docker में DOCKER_OPTS env वैरिएबल --dns - फ़्लैगशिप फ़्लैग के पास से गुज़र सकते हैं।
अलेक्जेंडर

इसने मेरे कर्ता-धर्ताओं को भी ठीक कर दिया।
BobMcGee

3
आर्क लिनेक्स पर मुझे ip link set down docker0इसके बजाय ifconfig docker0 downऔर systemctl restart dockerइसकी आवश्यकता थी service docker start। सभी छवियों को हटाने के लिए, मैंने किया थाdocker rmi $(docker images -q)
जालरूप

मेरे लिए पहली बार काम किया। फिर मैंने रिबूट किया, और समस्या फिर से सामने आ गई: उन चरणों को पुन: प्रस्तुत करने से समस्या फिर से ठीक नहीं हुई। मुझे नहीं पता कि यह क्या है।
user626921 11

1
बस देखा कि मेरा docker0 इंटरफ़ेस नीचे था, मैंने निष्पादित किया /etc/init.d/docker restartऔर यह व्यवसाय में वापस आ गया है
लोलस्क

14

यदि यह DNS रिज़ॉल्वर की समस्या है, तो इसका समाधान यहां है:

पहली बात यह है cat /etc/resolv.confकि डॉकटर कंटेनर में चलाया जाता है । यदि इसके पास एक अमान्य DNS सर्वर है, जैसे कि nameserver 127.0.x.x, तो कंटेनर डोमेन नामों को आईपी पते में हल करने में सक्षम नहीं होगा, इसलिए ping google.comविफल हो जाएगा।

जांच करने के लिए दूसरी चीज मेजबान मशीनcat /etc/resolv.conf पर चलाई जाती है । डॉकर मूल रूप से कंटेनर में होस्ट की प्रतिलिपि बनाता है हर बार एक कंटेनर शुरू किया जाता है। इसलिए यदि मेजबान की गलती गलत है, तो ऐसा करने वाला कंटेनर होगा।/etc/resolv.conf/etc/resolv.conf

यदि आपने पाया है कि मेजबान /etc/resolv.confगलत है, तो आपके पास 2 विकल्प हैं:

  1. DNS सर्वर को daemon.json में हार्डकोड करें। यदि आप DNS सर्वर को बदलने की अपेक्षा करते हैं तो यह आसान है, लेकिन आदर्श नहीं है।

  2. मेजबानों को ठीक करें /etc/resolv.conf। यह थोड़ा पेचीदा मामला है, लेकिन यह गतिशील रूप से उत्पन्न होता है, और आप DNS सर्वर को हार्डकोड नहीं कर रहे हैं।


1. docker daemon.json में हार्डकोड DNS सर्वर

  • संपादित करें /etc/docker/daemon.json

    {
        "dns": ["10.1.2.3", "8.8.8.8"]
    }
    
  • उन परिवर्तनों को प्रभावी करने के लिए docker डेमन को पुनः आरंभ करें:
    sudo systemctl restart docker

  • अब जब आप एक कंटेनर चलाते हैं / शुरू करते हैं, तो docker /etc/resolv.confमानों से पॉप्युलेट होगा daemon.json


2. मेजबानों को ठीक करें /etc/resolv.conf

उ। Ubuntu 16.04 और पहले का

  • Ubuntu 16.04 और उससे पहले के लिए, /etc/resolv.confगतिशील रूप से NetworkManager द्वारा उत्पन्न किया गया था।

  • लाइन में dns=dnsmasq(a #) के साथ टिप्पणी करें/etc/NetworkManager/NetworkManager.conf

  • पुनर्जीवित करने के लिए NetworkManager को पुनः आरंभ करें /etc/resolv.conf:
    sudo systemctl restart network-manager

  • मेजबान पर सत्यापित करें: cat /etc/resolv.conf

बी। उबंटू 18.04 और बाद में

  • उबंटू 18.04 systemd-resolvedको जेनरेट करने के/etc/resolv.conf लिए उपयोग में लाया गया । अब डिफ़ॉल्ट रूप से यह स्थानीय DNS कैश 127.0.0.53 का उपयोग करता है। यह कंटेनर के अंदर काम नहीं करेगा, इसलिए डॉकर Google के 8.8.8.8 DNS सर्वर को डिफ़ॉल्ट करेगा, जो फ़ायरवॉल के पीछे के लोगों के लिए टूट सकता है।

  • /etc/resolv.confउबंटू 18.04 में डिफ़ॉल्ट रूप ls -l /etc/resolv.confसे /run/systemd/resolve/stub-resolv.conf(127.0.0.53) को इंगित करता है जो वास्तव में एक सिमलिंक ( ) है ।

  • सिर्लिंक को इंगित करने के लिए बदलें /run/systemd/resolve/resolv.conf, जो वास्तविक DNS सर्वरों को सूचीबद्ध करता है:
    sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf

  • मेजबान पर सत्यापित करें: cat /etc/resolv.conf

अब आपके पास /etc/resolv.confकंटेनरों में कॉपी करने के लिए होस्ट के लिए डॉकटर के लिए मान्य होना चाहिए ।


इसके लिए धन्यवाद, वास्तव में मेरे दिमाग को खोने की कोशिश कर रहा था यह समझने की कोशिश कर रहा था कि एक वीपीएन पर डॉक कंटेनर और 18.04 के समाधान के साथ क्या हो रहा है। 18.04 के लिए फिक्सिंग /etc/resolv.conf ने मेरे लिए काम किया!
जॉर्ज पापास

विकल्प B ने मेरे लिए काम किया ..
codeSetter

निश्चित रूप से 2B systemdपैकेज के एक अद्यतन को जीवित नहीं करने वाला है ...
Auspex

13

एक मुद्दे पर अतिरिक्त मूल्य जोड़ने के प्रयास में मुझे भी अनुभव हुआ; वैकल्पिक उत्तर के साथ:

मेरा नेटवर्क कार्यालय से संबंधित था और Google DNS सेटिंग्स को अवरुद्ध कर दिया गया था ताकि कंटेनर आईपी पते को पिंग कर सके लेकिन डोमेन नाम नहीं।

मेरे मेजबान का /etc/resolv.confमूल रूप जैसा दिखता था;

#Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 127.0.1.1
search companyDomain.co.za

यह DNS सर्वर विवरणों के नेटवर्क प्रबंधक द्वारा किसी प्रकार की मास्किंग करने के कारण होता है।

डॉकटर नियमावली के अनुसार दुर्भाग्य से कंटेनर के रेजोल्व.कॉन्फ को बनाते समय डॉकटर किसी भी लोकलहोस्ट आईपी एड्रेस को फिल्टर करेगा और उन्हें गूगल के डीएनएस आईपी से बदल देगा। मेरे मामले में डोमेन नाम के कारण सीमाएँ बंद हो गईं।

मुझे करना पड़ा:

  • मेरे /etc/default/dockerडिफ़ॉल्ट को रीसेट करें ताकि कंटेनर मेरे होस्ट की resolv.conf सामग्री का उपयोग करें।
  • /etc/NetworkManager/NetworManager.confलाइन संपादित करें और टिप्पणी करें dns=dnsmasq। ऐसा इसलिए है क्योंकि NM 127.0.0.1 के बजाय वास्तविक DNS IP पते निर्दिष्ट कर सकता है।
  • NM के साथ पुनः आरंभ करें sudo service network-manager restart
  • डॉकटर सेवा के साथ पुनः आरंभ करें sudo service docker restart

apt-get update/upgradeउदाहरण के लिए, कंटेनर को चलाना तब इसे करने की अनुमति देगा ।


3
यह वास्तव में मेरे लिए काम किया। और मैं कंपनी इंट्रानेट से पीछे था
डैनियल आंद्रेई मिनकॉ

1
यह समाधान Ubuntu 16.04 और उससे पहले के लिए बहुत अच्छा काम करता है। उबंटू 18.04 और बाद के लिए, serverfault.com/a/918568
wisbucky

धन्यवाद! यह काम किया, जबकि स्वीकृत जवाब नहीं दिया। :)
देवोलस

8

आपकी त्रुटि यहाँ है:

 Cannot initiate the connection to archive.ubuntu.com:80 (2001:67c:1360:8c01::19).
 connect (101: Network is unreachable) [IP: 2001:67c:1360:8c01::19 80]

यह DNS के साथ कोई त्रुटि नहीं है, इसके बजाय आपका सिस्टम IPv6 होस्ट से कनेक्ट करने और विफल होने का प्रयास कर रहा है। मुमकिन है क्योंकि आपके पास अपने होस्ट पर आईपीवी 6 की पहुंच नहीं है। IPv6 पते की वास्तविक खोज सफल होती है। (Ubuntu दर्पण / संग्रह IPv6 और IPv4 दोनों पर उपलब्ध है। आप IPv6 को हिट करने के लिए सिर्फ अशुभ थे क्योंकि आपका सिस्टम मानता है कि इसे काम करना चाहिए।)

आप या तो ठीक करना चाहिए, miredo स्थापित करके , या अपने IPv4 दर्पण को हिट होने तक पुनः प्रयास करें।

यहां महत्वपूर्ण बात यह है कि DNS को दोष देना नहीं है, जैसा कि आप अपने स्वयं के पिंग परीक्षणों द्वारा देख सकते हैं।


1
तेजी से उत्तर के लिए धन्यवाद और स्पष्ट करना कि यह वास्तव में एक DNS मुद्दा नहीं है, मैं इसकी सराहना करता हूं। मैंने मिरदो को स्थापित किया - नो गो। यह भी ध्यान देने योग्य है कि जब मैं apt-get update -o Acquire :: ForceIPv4 = true apt-get update अभी भी विफल रहता है, तो मैंने अपने मूल पोस्ट को उस उत्तर के साथ अपडेट कर दिया है। मैंने यूएफडब्ल्यू सोच को अक्षम करने की कोशिश की है शायद यह मामला था, और अभी भी भाग्य नहीं था।
थॉमस वी।

अजीब - आप देख सकते हैं कि आपके पास IPv4 कनेक्टिविटी है क्योंकि आपका पिंग सफल होता है। लेकिन आप इस बात की परवाह किए बिना दर्पण से कनेक्ट नहीं कर सकते हैं कि आपके पास कुछ विषम मार्ग / नेटवर्किंग समस्या है (जो मुझे लगता है कि आप यहाँ क्यों पोस्ट कर रहे हैं!)

8

डॉकर आधिकारिक डॉक डॉकर द्वारा उपयोग के लिए एक DNS सर्वर को कॉन्फ़िगर करने के लिए उपकरण देता है

  1. /etc/default/dockerसंपादन के लिए फ़ाइल खोलें :

    sudo nano /etc/default/docker
    
  2. डॉकर के लिए एक सेटिंग जोड़ें:

    DOCKER_OPTS="--dns 8.8.8.8"
    
  3. 8.8.8.8जैसे स्थानीय DNS सर्वर से बदलें 192.168.1.1। आप कई DNS सर्वर भी निर्दिष्ट कर सकते हैं। उदाहरण के लिए, उन्हें रिक्त स्थान से अलग किया गया:

    --dns 8.8.8.8 --dns 192.168.1.1
    

    चेतावनी: यदि आप ऐसा लैपटॉप पर कर रहे हैं जो विभिन्न नेटवर्क से जुड़ता है, तो सार्वजनिक DNS सर्वर का चयन करना सुनिश्चित करें।

    PS: nm-toolस्थानीय होस्ट DNS सर्वर की जांच करने के लिए इस्तेमाल किया जा सकता है

  4. फ़ाइल को सहेजें और बंद करें।

  5. डॉकर डेमॉन को फिर से शुरू करें।

    sudo service docker restart
    

ध्यान दें कि डॉकर उपस्टार्ट और SysVinit के लिए यह पुराना कॉन्फिगर फाइल है। सिस्टमड के लिए वर्तमान तरीका (Ubuntu 16.04 के बाद से) डीएनएस /etc/docker/daemon.jsonडेमॉन सेटिंग्स जैसे डीएनएस के लिए उपयोग करना है
वारबैंक

0

अन्य पाठकों के लिए जो यहां बूट 2 डॉक का उपयोग करते हुए आते हैं, यहां बताया गया है कि मैंने कैसे तय किया। वास्तव में, ऊपर दिए गए उत्तर ने मुझे सही दिशा की ओर इशारा किया।

असल में, किसी कारण से बूट 2 डॉक के अंदर कंटेनर होस्टनामों को हल नहीं कर सका।

इसलिए मैंने अभी boot2docker को पुनः आरंभ किया और कंटेनरों को शुरू किया। अब hostnames फिर से ठीक से हल कर सकते हैं।

मुझे लगता है कि समस्या बूट 2 डॉक शुरू कर रही थी, जबकि होस्ट पर नेटवर्क कनेक्ट किया जा रहा था, जिससे बूट 2 डॉक शुरू हो गया और एक गैर-कार्यशील स्थिति में प्रवेश कर गया।


0

मेरे पास विंडोज पर एक ही मुद्दा था। इस कमांड ने इसे मेरे लिए काम किया:docker-machine restart


0

डेबियन 9 पर डोकर डेमॉन को फिर से शुरू करें

service docker restart

और कनेक्शन और नेटवर्क ठीक काम करता है


-1

एक समान मुद्दा था, लेकिन उपयोगकर्ता परिभाषित नेटवर्क के अंदर कंटेनरों के बीच नाम का समाधान भी थोड़ा परतदार लग रहा था। कुछ तुम जैसे कुछ भी हल नहीं कर सका।

मुद्दा एक स्थानांतरित / var / lib / docker था। अंतरिक्ष कारणों से इसे एनएफएस के माध्यम से माउंट किया गया था। एक स्थानीय फाइल सिस्टम को जोड़ना और वहां फाइलों को स्थानांतरित करना समस्या का समाधान करता है।


यदि आपको लगता है कि किसी प्रश्न का उत्तर इसी तरह के प्रश्न पर दिया जा सकता है, तो कृपया इसे उस प्रश्न के डुप्लिकेट के रूप में चिह्नित करें। यदि आप ऐसा नहीं कर सकते हैं, तो आपको एक अलग उत्तर बनाने के बजाय एक टिप्पणी छोड़नी चाहिए।
जेनी डी का कहना है कि
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.