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

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

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

मैंने अपना /आदि/संकल्प बदल दिया । मेरे स्थानीय डीएनएस सर्वर से गूगल के सार्वजनिक डीएनएस सर्वर (8.8.8.8 और 8.8.4.4) में नेमसर्वर और अभी भी कोई भाग्य नहीं है । मैंने डीएनएस को डॉकर_ऑप्ट्स /आदि/डिफॉल्ट/डॉकर में भी गूगल पर सेट किया और डॉकर को फिर से शुरू किया ।

मैंने कोरओएस खींचने की भी कोशिश की, और यम डीएनएस को भी हल नहीं कर सका ।

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

मैं नहीं कर रहा हूँ के पीछे एक प्रॉक्सी है, मैं कर रहा हूँ पर एक बहुत ही मानक स्थानीय नेटवर्क, और के इस संस्करण में Ubuntu करने के लिए है की तारीख और ताजा (मैं स्थापित दो दिन पहले किया जा करने के लिए करीब करने के लिए गोदी श्रमिक).

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

त्रुटि संदेश

➜  arthouse git:(docker) ✗ docker build --no-cache .Sending build context to Docker daemon 51.03 MBSending build context to Docker daemon Step 0 : FROM ubuntu:14.04 ---> 5506de2b643bStep 1 : RUN apt-get update ---> Running in 845ae6abd1e0Err http://archive.ubuntu.com trusty InReleaseErr http://archive.ubuntu.com trusty-updates InReleaseErr 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/bashroot@7bc182bf87bb:/# ifconfigeth0      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.comPING 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 0msrtt min/avg/max/mdev = 12.367/12.367/12.367/0.000 msroot@7bc182bf87bb:/# ping 8.8.8.8PING 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 ms64 bytes from 8.8.8.8: icmp_seq=2 ttl=44 time=21.7 ms64 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=trueErr http://archive.ubuntu.com trusty InReleaseErr http://archive.ubuntu.com trusty-updates InReleaseErr http://archive.ubuntu.com trusty-security InReleaseErr http://archive.ubuntu.com trusty-proposed InReleaseErr 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... DoneW: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty/InRelease  

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

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

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

apt-get install bridge-utilspkill dockeriptables -t nat -Fifconfig docker0 downbrctl delbr docker0service docker restart

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

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

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

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

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

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


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

  • संपादित करें /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 नेटवर्क प्रबंधक द्वारा गतिशील रूप से उत्पन्न किया गया था ।

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

  • पुन: उत्पन्न करने के लिए नेटवर्कमैनेजर को पुनरारंभ करें /etc/resolv.conf :
    sudo systemctl restart network-manager

  • होस्ट पर सत्यापित करें: cat /etc/resolv.conf

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

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

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

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

  • होस्ट पर सत्यापित करें: cat /etc/resolv.conf

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

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

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

मेरे मेजबान का /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 OVERWRITTENnameserver 127.0.1.1search companyDomain.co.za

यह नेटवर्क मैनेजर द्वारा डीएनएस सर्वर विवरण के किसी प्रकार का मास्किंग करने के कारण है ।

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

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

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

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

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

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

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

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

    --dns 8.8.8.8 --dns 192.168.1.1

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

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

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

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

    sudo service docker restart

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

 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]

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

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

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

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

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

इसलिए मैंने अभी बूट 2 डॉकर को फिर से शुरू किया और कंटेनर शुरू किए । अब होस्टनाम फिर से ठीक से हल कर सकते हैं ।

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

मुझे इस समस्या का सामना करना पड़ा जब मैंने उबंटू इंस्टॉलर को डॉकर स्नैप पैकेज स्थापित करने की अनुमति दी । जब मैंने इसे छोड़ दिया और आधिकारिक डॉकर पैकेज पर स्विच किया तो समस्या स्वयं हल हो गई ।

sudo snap remove dockercurl -fsSL https://get.docker.com -o get-docker.shsh get-docker.sh

फ़ाइल खोलें /lib/systemd/system/docker.service

में ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sockजोड़ें
--dns 8.8.8.8

इस तरह:

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --dns 8.8.8.8

डॉकर सेवा को पुनरारंभ करें

मैं एक ही मुद्दा था पर Windows. इस आदेश ने इसे मेरे लिए काम कर दिया: docker-machine restart

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

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

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