कॉर्पोरेट नेटवर्क पर छवि निर्माण के दौरान नेटवर्क कॉल विफल हो जाते हैं


81

मुझे अपने कॉर्पोरेट नेटवर्क पर डॉकर चित्रों के निर्माण में समस्या हो रही है। मैं अभी Docker के साथ शुरुआत कर रहा हूं, इसलिए मेरे पास हैलो-वर्ल्ड टाइप ऐप के लिए निम्नलिखित Dockerfile है:

# DOCKER-VERSION 0.3.4
FROM    centos:6.4
# Enable EPEL for Node.js
RUN     rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
# Install Node.js and npm
RUN     yum install -y npm
# Bundle app source
ADD . /src
# Install app dependencies
RUN cd /src; npm install
EXPOSE  8080
CMD ["node", "/src/index.js"]

यह ठीक काम करता है जब मैं इसे अपने लैपटॉप पर घर पर, अपने वायरलेस नेटवर्क पर बनाता हूं। यह अपेक्षित निर्भरता को नीचे खींचता है और छवि को सही ढंग से बनाता है।

हालाँकि, जब मैं अपने कॉर्पोरेट नेटवर्क पर काम कर रहा होता हूं, तो यह डॉक बिल्ड तब विफल हो जाता है, जब RPM को इस त्रुटि संदेश के साथ download.fedoraproject.org से नीचे खींचने की कोशिश की जाती है:

चरण 2: RUN rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm ---> e026afe9ed5 कर्ल में रनिंग: (5) कैन ' t संकल्प प्रॉक्सी 'some.proxy.address' त्रुटि: स्किपिंग http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm - स्थानांतरण विफल

अपने कॉर्पोरेट नेटवर्क पर, मैं अपने लैपटॉप से ​​ठीक उस URL तक पहुँच सकता हूँ। लेकिन एक बार डॉकटर कंटेनर बनाने की कोशिश कर रहा है, अचानक यह सब हल नहीं हो सकता है। यह व्यवहार विभिन्न प्रकार के बाहरी संसाधनों (एप्ट-गेट, इत्यादि) के लिए समान है: वे सभी कॉर्पोरेट नेटवर्क पर मेरे लैपटॉप पर ठीक हल कर सकते हैं, लेकिन डॉकर उन्हें हल नहीं कर सकता।

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


stackoverflow.com/questions/19210563/ पर एक नज़र डालें: यह आपके मुद्दे को भी हल कर सकता है
थॉमसलेविल

मेरे लिए एक ही समस्या है। मैं दौड़ना भूल गया था apt-get update
मत्तीथिस्बे

जवाबों:


93

मैं इस मुद्दे का पता लगाने में सक्षम था। उबंटू पर, डॉकर कंटेनर के लिए DNS सर्वर को Google के सर्वर पर 8.8.8.x पर सेट करता है। जैसा कि मैं इसे समझता हूं, यह उबंटू पर एक वर्कअराउंड है क्योंकि इस तथ्य के कारण कि उबंटू 127.0.0.1 पर सेट /etc/resolv.conf है।

वे Google सर्वर हमारे फ़ायरवॉल के पीछे से सुलभ नहीं थे, यही कारण है कि हम किसी भी URL को हल नहीं कर सके।

फिक्स डॉकटर को यह बताना है कि कौन से DNS सर्वर का उपयोग करना है। यह फिक्स इस बात पर निर्भर करता है कि आपने डॉकर को कैसे स्थापित किया है:

उबंटू पैकेज

यदि आपके पास उबंटू पैकेज स्थापित है, तो संपादित करें / आदि / डिफ़ॉल्ट / docker और निम्नलिखित पंक्ति जोड़ें:

DOCKER_OPTS="--dns <your_dns_server_1> --dns <your_dns_server_2>"

आप इस DNS में जितने चाहें उतने DNS सर्वर जोड़ सकते हैं। एक बार जब आप इस फ़ाइल को संपादित कर लेते हैं, तो आप अपनी डॉकर सेवा को फिर से शुरू करना चाहेंगे:

sudo service docker restart

बाइनरी

यदि आपने द्विपदीय विधि के माध्यम से डॉकर को स्थापित किया है (अर्थात कोई पैकेज नहीं), तो आप डॉक्स सर्वर को तब शुरू करते हैं जब आप डॉकिंग सिस्टम शुरू करते हैं:

sudo docker -d -D --dns <your_dns_server_1> --dns <your_dns_server_2> &

4
Dockfiles के साथ 'docker build' कमांड का उपयोग करने के बारे में ... यह उन परिस्थितियों में काम करने जैसा नहीं लगता है: docker --dns = 209.18.47.61 build। 2> और 1 | tee ./output.txt
क्वासौर

2
हाँ, यह डॉक बिल्ड के साथ काम करना चाहिए। docker build में कमांड पर स्वयं एक --dns फ्लैग नहीं है, लेकिन यदि आप इसे इस तरह डेमॉन पर सेट करते हैं तो यह
docker

इस समाधान के लिए धन्यवाद। मेरे पक्ष में समस्या यह थी, कि docker को जाहिरा तौर पर उपलब्ध और सक्षम होने के लिए IPv4 की आवश्यकता है। WTF? जानें: IPv4 मर चुका है केवल IPv4 का सॉफ्टवेयर गंभीर रूप से टूटा हुआ है।
तिनो

1
मैंने पहले ही यह कदम उठा लिया था और फिर से त्रुटियां होने लगी थीं। सेवा को फिर से शुरू करके इसे फिर से निर्धारित किया गया।
एंड्रयू ग्रोथे

मैं इस मुद्दे को docker 1.7 के साथ ले रहा हूं, हालांकि मैंने इसे या तो --dnsविकल्प के साथ चलाने की कोशिश की है या इसमें /etc/default/docker
कॉन्फिगरेशन

65

मैं डॉकर डेमॉन की डीएनएस सेटिंग्स को बदलने की सलाह देता हूं। आप /etc/docker/daemon.json पर डेमन कॉन्फ़िगरेशन फ़ाइल बनाकर docker डेमन के लिए डिफ़ॉल्ट विकल्प सेट कर सकते हैं । अपनी होस्ट मशीन के अनुसार DNS सर्वर सेट करें, जैसे मेरा DNS सर्वर 10.0.0.2 है:

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

फिर आपको बस पुनः आरंभ करने की आवश्यकता है:

sudo service docker restart

स्टेप-बाय-स्टेप स्पष्टीकरण यहाँ उपलब्ध है फिक्स डॉकर की नेटवर्किंग डीएनएस कॉन्फिगरेशन


20

निम्नलिखित चरण मेरे लिए काम करते हैं (docker build और docker run कमांड) दोनों के लिए। मेरा लिनक्स संस्करण उबंटू 14.04 है।

  • निम्नलिखित कमांड का उपयोग करके DNS को पहचानें।
    एनएम-उपकरण | grep डीएनएस

यह परिणाम DNS: 192.168.1.1 मेरे मामले में

  • /Etc/default/docker.io में प्रविष्टि बनाएँ। मेरी वर्तमान प्रविष्टि इस तरह दिखती है
DOCKER_OPTS = "- dn 8.8.8.8 --dns 8.8.4.4-dns 192.168.1.1"
  • डॉकटर सेवा पुनः आरंभ करें
 sudo सेवा docker.io पुनरारंभ 

2
CentOS समतुल्य /etc/sysconfig/dockerफ़ाइल है, जिसमें मैं DOCKER_OPTS="--dns 8.8.8.8"लाइन जोड़ने और अपनी समस्या को हल करने में सक्षम था ।
मार्कहु

OpenSuSE में भी /etc/sysconfig/dockerफ़ाइल है।
डेविड लकाटोस

11

SystemD (Ubuntu 16, RHEL 7 ...) के साथ काम करने वाले किसी भी लिनक्स वितरण के लिए, मार्ग को निम्न कमांड के साथ प्रदर्शित किया जाएगा:

$ systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2016-06-29 08:10:33 PDT; 2min 34s ago
     Docs: https://docs.docker.com
 Main PID: 1169 (dockerd)
    Tasks: 19
   Memory: 85.0M
      CPU: 1.779s
   CGroup: /system.slice/docker.service
           ├─1169 /usr/bin/dockerd --dns 172.18.20.11 --dns 172.20.100.15 --dns 8.8.8.8 --dns 8.8.4.4 -H fd://
           └─1232 docker-containerd -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --shim docker-containerd-shim --met

रास्ता होगा /lib/systemd/system/docker.service। उन DOCKER_OPTSमानों को जोड़ें , जिनमें से कोई भी हो --dns, उस रेखा में जहां डेमॉन शुरू किया गया है।

cat /lib/systemd/system/docker.service | grep dns 
ExecStart=/usr/bin/dockerd --dns 172.18.20.11 --dns 172.20.100.15 --dns 8.8.8.8 --dns 8.8.4.4  -H fd://

1
धन्यवाद! संपादन के बाद docker.serviceमुझे sudo service docker stopsystemctl daemon-reloadsudo service docker start
डॉकटर

1
आप /etc/systemd/system/docker.service.dसिस्टम संस्करण को बदलने के बजाय संशोधित कॉन्फ़िगरेशन (जो सिस्टमड में सहायक रूप से विलय / सिस्टम कॉन्फ़िगरेशन को ओवरराइड करता है) के साथ एक यूनिट फ़ाइल को जोड़ने से बेहतर है । उत्तरार्द्ध उन्नयन पर खो जाएगा।
रमन

6

मैक और विंडोज पर डॉकर (कम से कम> = 1.13, शायद पहले के)

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

डॉकर डेमन एड कॉन्फिग


5

अपने DNS को डॉकर डेमॉन में निर्दिष्ट करें।

सबसे पहले आप अपना DNS एड्रेस प्राप्त करें

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

परीक्षण करें कि क्या समस्या वास्तव में इस नए DNS को मजबूर करने वाले डॉक कंटेनर को लॉन्च करके DNS के साथ है

$ docker run --dns 10.0.0.2 <image_name> <command_name>

यदि यह समस्या हल करता है, तो आप निम्न तरीके से सभी docker डेमॉन के लिए इस सुधार को लागू कर सकते हैं

एक फ़ाइल /etc/docker/daemon.json संपादित करें या बनाएं

इस फ़ाइल में निम्न पंक्ति जोड़ें

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

पुनः आरंभ करने वाला

$ sudo service docker restart

यह सब प्रक्रिया करने के लिए एक बहुत अच्छा मार्गदर्शक यहां पाया जा सकता है।

https://development.robinwinslow.uk/2016/06/23/fix-docker-networking-dwns/


यह एक बॉर्डरलाइन लिंक-ओनली उत्तर है । आपको यहाँ पर अधिक से अधिक जानकारी शामिल करने के लिए अपने उत्तर का विस्तार करना चाहिए, और केवल संदर्भ के लिए लिंक का उपयोग करना चाहिए।
गुडबाय StackExchange

यदि आप स्नैप द्वारा स्थापित किया daemon.jsonगया है/var/snap/docker/<id>/config/daemon.json
sjt003

3

डॉकर सेवा को फिर से शुरू किए बिना समाधान

बिल्ड समय पर docker buildओवरराइड करके अन्य कॉल को प्रभावित किए बिना (और डॉकर सेवा को फिर से शुरू किए बिना) सिंगल डॉकर छवि के लिए डीएनएस सेटिंग्स को संशोधित करना संभव है resolv.conf:

FROM ubuntu:18.04

RUN echo "nameserver 123.123.123.123" > /etc/resolv.conf && apt update

123.123.123.123अपने कॉर्पोरेट नेटवर्क ( nmcli dev show | grep 'IP4.DNS'वर्तमान में उपयोग किए गए DNS सर्वर का उपयोग करने के लिए) के साथ आईपी को बदलें ।

डाउनसाइड्स:

  • यह डॉकरफाइल से किसी अन्य लाइन को प्रभावित नहीं करता है। इसलिए, आपको फ़िक्स के साथ हर लाइन को प्रीफ़िक्स करना होगा, अगर यह DNS रिज़ॉल्यूशन पर निर्भर करता है

1

मेरे उबंटू 16.04 मशीन पर, कभी-कभी, Google की DNS डॉकर छवियों के निर्माण के लिए काम नहीं करती है।

cat /etc/docker/daemon.json
{"dns": [""8.8.8.8"] }

मुझे निम्न आदेश का उपयोग करके मैन्युअल रूप से अपने सेवा प्रदाता DNS का पता लगाना है

nmcli device show <interfacename> | grep IP4.DNS

125.22.47.102

और इसे मेरे daemon.jsonशो के रूप में नीचे जोड़ें

cat /etc/docker/daemon.json 

{"dns": ["125.22.47.102","8.8.8.8"] }

 restart docker

sudo service docker restart

(PS nm-टूल को Ubuntu 15.04 से हटा दिया गया है)

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