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


मैं उबंटू 14.04 एलटीएस पर अपने डॉकर कंटेनर के साथ एक समस्या में भाग रहा हूं। डॉकर ने दो दिनों तक ठीक काम किया, और फिर अचानक मैंने अपने कंटेनरों के अंदर सभी नेटवर्क कनेक्टिविटी खो दी। शुरुआत में नीचे त्रुटि आउटपुट मुझे विश्वास दिलाता है कि ऐसा इसलिए था क्योंकि apt-get आईपीवी 6 के माध्यम से DNS को हल करने का प्रयास कर रहा है।

मैंने अपनी मेजबान मशीन पर आईपीवी 6 को अक्षम कर दिया और फिर भी, सभी छवियों को हटा दिया, आधार उबंटू खींच लिया, और अभी भी समस्या में भाग गया।

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

मैंने कोरोज को खींचने की भी कोशिश की, और यम या तो 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

इसके अलावा, जब मैं आईपीवी 4 को मजबूर करता हूं तो अद्यतन प्राप्त करने में विफल रहता है:

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  

43
2017-11-08 18:26


मूल




जवाब:


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

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

जाहिर है डॉकर 0 नेटवर्क पुल लटका दिया गया था। पुल-यूटिल स्थापित करना और निम्नलिखित को चलाने के लिए मेरे डॉकर को काम करने के क्रम में मिला:

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

54
2017-11-08 19:09



आपको अपनी छवियों को पुनर्निर्मित करने की आवश्यकता नहीं है। resolv.conf हर बार जब आप नए कंटेनर चलाते हैं उत्पन्न होता है। इसलिए आपको पुराने कंटेनर को हटाने और दूसरे को शुरू करने की आवश्यकता है। मैं कल इस समस्या का सामना कर रहा था। साथ ही, यदि आप कॉरपोरेट इंट्रानेट में हैं, तो आप --dns-search = your.company.domain को डॉकर डिमन में / etc / default / docker में DOCKER_OPTS env वैरिएबल में --dns --dns झंडे के पास पास कर सकते हैं। - Alexander.Iljushkin
यह मेरे डॉकर मुद्दों को भी ठीक करता है। - BobMcGee
आर्क लिनक्स पर मुझे चाहिए ip link set down docker0 के बजाय ifconfig docker0 down तथा systemctl restart docker के बजाय service docker start। सभी छवियों को हटाने के लिए, मैंने किया docker rmi $(docker images -q) - meshy
यह मेरे लिए पहली बार काम किया। फिर मैंने रीबूट किया, और समस्या फिर से दिखाई दी: उन चरणों को पुन: उत्पन्न करने से इस मुद्दे को फिर से ठीक नहीं किया गया। मुझे नहीं पता कि यह किस बारे में है। - user626921
बस देखा कि मेरा डॉकर 0 इंटरफेस नीचे था, मैंने निष्पादित किया /etc/init.d/docker restart और यह व्यापार पर वापस आ गया है - lolesque


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

मेरा नेटवर्क कार्यालय से संबंधित था और 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 सर्वर विवरण के किसी प्रकार का मास्किंग कर रहा है।

दुर्भाग्य से के अनुसार डॉकर मैनुअल कंटेनर के resolv.conf का निर्माण करते समय डॉकर किसी भी स्थानीयहोस्ट आईपी पते को फ़िल्टर करेगा और उन्हें Google के DNS आईपी के साथ प्रतिस्थापित करेगा। जो मेरे मामले में डोमेन नाम ऑफ-सीमा होने का कारण बनता है।

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

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

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


10
2017-07-26 09:43



यह वास्तव में मेरे लिए काम किया। और मैं कंपनी इंट्रानेट के पीछे था - Mincă Daniel Andrei
यह समाधान उबंटू 16.04 और इससे पहले के लिए बहुत अच्छा काम करता है। उबंटू 18.04 और बाद में, देखें serverfault.com/a/918568 - wisbucky
धन्यवाद! यह काम किया, जबकि स्वीकृत उत्तर नहीं था। :) - Devolus


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

 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 के साथ कोई त्रुटि नहीं है, इसके बजाय आपका सिस्टम आईपीवी 6 होस्ट से जुड़ने और विफल होने का प्रयास कर रहा है। संभवतः क्योंकि आपके पास आपके होस्ट पर आईपीवी 6 एक्सेस नहीं है। आईपीवी 6 पते का वास्तविक लुकअप सफल होता है। (उबंटू दर्पण / संग्रह दोनों आईपीवी 6 और आईपीवी 4 पर उपलब्ध है। आप आईपीवी 6 को मारने के लिए पर्याप्त दुर्भाग्यपूर्ण थे क्योंकि आपका सिस्टम मानता है कि इसे काम करना चाहिए।)

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

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


7
2017-11-08 18:38



तेज़ उत्तर के लिए धन्यवाद और यह स्पष्ट करना कि यह वास्तव में एक DNS मुद्दा नहीं है, मैं इसकी सराहना करता हूं। मैंने miredo स्थापित किया - नहीं जाना। यह भी ध्यान देने योग्य है कि जब मैं apt-get अद्यतन चलाता हूं- प्राप्त करें :: ForceIPv4 = true apt-get अद्यतन अभी भी विफल रहता है, मैंने उस उत्तर के साथ अपनी मूल पोस्ट अपडेट की है। मैंने यूएफडब्ल्यू सोच को अक्षम करने की कोशिश की है शायद यह मामला था, और अभी भी भाग्य नहीं है। - Thomas V.
अजीब - आप देख सकते हैं कि आपके पास आईपीवी 4 कनेक्टिविटी है क्योंकि आपका पिंग सफल होता है। लेकिन आप दर्पण से कनेक्ट नहीं हो सकते हैं, भले ही आपके पास कुछ अजीब रूटिंग / नेटवर्किंग समस्या है (जो मुझे लगता है कि आप यहां क्यों पोस्ट कर रहे हैं!) - Steve Kemp


डॉकर आधिकारिक डॉक्टर डॉकर द्वारा उपयोग के लिए एक 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 सर्वर चुनना सुनिश्चित करें।

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

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

  5. डॉकर डिमन को पुनरारंभ करें।

    sudo restart docker
    

7
2018-05-27 05:48



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


यदि यह एक 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. Daemon.json में DNS सर्वर हार्डकोड करें। यह आसान है, लेकिन आदर्श नहीं है यदि आप DNS सर्वर को बदलने की अपेक्षा करते हैं।

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


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

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

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

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


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

ए उबंटू 16.04 और इससे पहले

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

  • लाइन पर टिप्पणी करें dns=dnsmasq (के साथ #) में /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 वास्तव में एक सिम्लिंक है (ls -l /etc/resolv.conf) जो इंगित करता है /run/systemd/resolve/stub-resolv.conf (127.0.0.53) डिफ़ॉल्ट रूप से उबंटू 18.04 में।

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

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

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


6
2018-06-27 23:06



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


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

असल में, boot2docker के अंदर किसी कारण के कंटेनर होस्टनाम को हल नहीं कर सके।

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

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


0
2018-06-23 01:42





मेरे पास विंडोज़ पर एक ही समस्या थी। यह आदेश मेरे लिए काम कर रहा है: docker-machine restart


0
2017-08-11 22:16





डेबियन 9 पर डॉकर डिमन को पुनरारंभ करें

service docker restart 

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


0
2018-06-07 15:30





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

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


-1
2017-08-10 10:54



अगर आपको लगता है कि एक प्रश्न के उत्तर से एक प्रश्न का उत्तर दिया जा सकता है, तो कृपया इसे उस प्रश्न के डुप्लिकेट के रूप में चिह्नित करें। यदि आप ऐसा नहीं कर सकते हैं, तो आपको इसे एक अलग उत्तर बनाने के बजाय एक टिप्पणी छोड़नी चाहिए। - Jenny D