डॉकर कंटेनरों के अंदर कोई इंटरनेट कनेक्शन नहीं


25

मैं किसी भी डॉकटर कंटेनर के अंदर इंटरनेट कनेक्शन की आवश्यकता वाले किसी भी कमांड को निष्पादित नहीं कर सकता।

काम करता है:

docker run ubuntu /bin/echo 'Hello world'

काम नहीं करता:

docker run ubuntu apt-get update

Err:1 http://archive.ubuntu.com/ubuntu xenial InRelease
  Temporary failure resolving 'archive.ubuntu.com'
Err:2 http://archive.ubuntu.com/ubuntu xenial-updates InRelease
  Temporary failure resolving 'archive.ubuntu.com'
Err:3 http://archive.ubuntu.com/ubuntu xenial-security InRelease
  Temporary failure resolving 'archive.ubuntu.com'
Reading package lists...
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/xenial/InRelease  Temporary failure resolving 'archive.ubuntu.com'
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/xenial-updates/InRelease  Temporary failure resolving 'archive.ubuntu.com'
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/xenial-security/InRelease  Temporary failure resolving 'archive.ubuntu.com'

इसी तरह pipऔर ping

मैं Ubuntu 16.04 पर हूँ और फ़ायरवॉल या कॉर्पोरेट प्रॉक्सी सर्वर का उपयोग नहीं कर रहा हूँ और डॉकटर को पुनः आरंभ करने का प्रयास किया है।

युपीडी:

इंटरेक्टिव मोड में अपडेट उसी तरह से विफल हो जाता है।

docker exec -ti angry_goodall /bin/bash
apt-get update
#fails
ping google.com
#fails with "unknown host" message
ping 8.8.8.8 
# shows PING 8.8.8.8 (8.8.8.8): 56 data bytes
# and than hangs indefinetly

sudo apt-get update मेजबान पर यानी मेरे कंप्यूटर पर डॉकटर के बाहर सफलतापूर्वक चलता है।

अद्यतन डॉकर संस्करण 1.12.1, 23cf638 का निर्माण करें


क्या आप होस्ट से डोमेन पिंग कर सकते हैं? क्या आप apt-get updateडॉकटर के साथ इंटरैक्टिव मोड में चल सकते हैं ?
9

आउटपुट में त्रुटि दिखाई देती है: अस्थाई असफलता 'आर्काइव.बंटू.कॉम' को हल करने की कोशिश करती है ... कोशिश करें .. पिंग www.google.com .. देखें कि क्या आपको समान प्रतिक्रिया मिलती है .. तो कोशिश करें ... पिंग 8.8.8.8 .. , अगर IP काम करता है, और होस्ट नाम नहीं है, तो आपका DNS टूट गया है (अधिक /etc/resolv.conf यह देखने के लिए कि DNS सर्वर का उपयोग क्या किया जा रहा है)
TG2

@adampski, मैंने आपके सुझावों के आधार पर प्रश्न अपडेट किया।
सास्को लाइखेंको

@ TG2, मैंने आपके सुझावों के आधार पर भी सवाल अपडेट किया।
सास्को लाइखेंको

डॉक इंजन का कौन सा संस्करण आप चला रहे हैं?
adampski

जवाबों:


15

डॉकर के लिए GitHub के अंक # 866 पर क्रिक द्वारा सुझाए गए :

pkill docker
iptables -t nat -F
ifconfig docker0 down
brctl delbr docker0
docker -d

"यह पुल को फिर से बनाने और सभी नेटवर्क नियमों को मजबूत करने के लिए डॉकटर को मजबूर करेगा"


1
मैंने इसकी कोशिश की, और यह मेरे पूरे कंप्यूटर पर नेटवर्क को मारता है।
पीटरसन

यह मेरे लिए मददगार है और इस मुद्दे को हल करता है। धन्यवाद।
राव

10
-dध्वज से बाहर निकलने नहीं देता है।
लुइस डी सूसा

2
हाय @ LuísdeSousa यह शर्म की बात है आपने इसे वोट दिया लेकिन इस संभावना पर विचार करें कि शायद कुछ स्विच हटा दिए गए हैं या नए रिलीज़ में बदल दिए गए हैं। खासकर जब से यह एक साल पहले खत्म हुआ था।
एडंस्की

3
आदेश की केवल कॉपी / अतीत के बजाय आप बता सकते हैं कि ये क्या मतलब है :)
Adelin

12

StackOverflow में एक समान समस्या है जहां एक अलग समाधान Ubuntu 16.04 पर Docker 17.09 के साथ इस मुद्दे को हल करता है:

की सामग्री की जाँच करें resolv.conf:

$ cat /etc/resolv.conf

यदि इसमें एक पंक्ति शामिल है जैसे nameserver 127.0.1.1कि इसका मतलब है कि कंटेनर एक गलत नाम सर्वर प्राप्त कर रहे हैं। इसे ठीक करने के लिए NetworkManager.confफाइल को संपादित करें :

$ sudo pico /etc/NetworkManager/NetworkManager.conf

और लाइन के साथ टिप्पणी करें dns=dnsmasq; फ़ाइल इस तरह दिखनी चाहिए:

[main]
plugins=ifupdown,keyfile,ofono
#dns=dnsmasq

[ifupdown]
managed=false

अंत में, नेटवर्क प्रबंधक को पुनः आरंभ करें:

$ sudo systemctl restart network-manager

कंटेनर फिर से परीक्षण करें:

$ docker run ubuntu:16.04 apt-get update
Get:1 http://archive.ubuntu.com/ubuntu xenial InRelease [247 kB]
Get:2 http://archive.ubuntu.com/ubuntu xenial-updates InRelease [102 kB]

मेरे इंस्टॉल ने विवरण से मेल खाया और उपरोक्त दृष्टिकोण ने मेरे लिए समस्या का समाधान किया।
krcools

उबंटू 18.04 के लिए अद्यतन उत्तर: superuser.com/a/1335054
समझदार

7

सबसे पहले बात 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 daemon को पुनः आरंभ करें:
    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कंटेनरों में कॉपी करने के लिए होस्ट के लिए एक मान्य होना चाहिए ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.