2016-02-09 7 views
11

के साथ काम नहीं कर रहे कंटेनरों के बीच लिंक संस्करण 2 डॉकर-कंपोज़ फ़ाइल में कंटेनर के बीच लिंकिंग काम नहीं कर रहा है।डॉकर-कंपोज़ संस्करण 2

केवल 'पुराने' संस्करण 1 प्रारूप का उपयोग करते समय, मुझे कंटेनर के/etc/होस्ट में लिंक दिखाई देता है।

मेरे पास निम्न मूल संस्करण 2 डॉकर-compose.yml फ़ाइल है।

 
version: '2' 

services: 
    my-app: 
    image: tomcat:8.0 
    container_name: my-app1 
    links: 
     - my-redis 
    my-redis: 
    image: redis 
    container_name: my-redis1 

जब मैं निम्नलिखित कमांड चलाएँ:

docker-compose up -d

मुझे लगता है कि दो कंटेनरों शुरू कर रहे हैं, लेकिन कोई लिंक/आदि में बनाई गई है/hosts फाइल:

docker exec -it my-app1 cat /etc/hosts
 
    127.0.0.1  localhost 
    ::1  localhost ip6-localhost ip6-loopback 
    fe00::0 ip6-localnet 
    ff00::0 ip6-mcastprefix 
    ff02::1 ip6-allnodes 
    ff02::2 ip6-allrouters 
    172.18.0.3  2abb84ccada9 

'my-app1' से मैं 'my-redis1' के आईपी पते का उपयोग करके अन्य कंटेनर को पिंग कर सकता हूं ', लेकिन मैं' my-redis1 'पिंग नहीं कर सकता (नाम के आधार पर)।

यहां समस्या क्या हो सकती है?

अतिरिक्त जानकारी:

  • डोकर संस्करण 1.10.0, निर्माण 590d5108
  • डोकर-लिखें संस्करण 1.6.0, निर्माण d99cad6
  • लिनक्स कर्नेल: 4.3.5-300.fc23.x86_64
+0

डोकर 1.10 नहीं रह गया है 'का उपयोग करता है/etc/hosts' यह एक एम्बेडेड DNS सर्वर का उपयोग करता है। होस्ट पर चल रहे डीएनएस सर्वर और फायरवाल्ड के साथ एक ज्ञात समस्या है। इससे समस्या हो सकती है। आपको कंटेनर नाम और सेवा नाम दोनों का उपयोग करके पिंग करने में सक्षम होना चाहिए। – dnephin

+0

धन्यवाद, समस्या मेजबान (फेडोरा) पर फ़ायरवॉल था। डॉकर कंटेनर होस्ट से अलगाव प्रदान करते हैं, लेकिन नया नेटवर्किंग होस्ट कॉन्फ़िगरेशन पर काफी पसंद है :-(... – user2030035

उत्तर

4

समस्या मेरी फेडोरा मेजबान के firewalld है।

फ़ायरवॉल अस्थायी रूप से अक्षम ('systemctl stop firewalld' के बाद, 'systemctl पुनरारंभ डॉकर' के बाद) सब कुछ डॉकर दस्तावेज़ के अनुसार काम करता है।

डॉकर के साथ उपयोग किए जाने पर फायरवालल्ड के साथ एक बड़ी समस्या प्रतीत होती है, देखें: https://github.com/docker/docker/issues/16137

ध्यान दें कि आरएचईएल/सेंटोस 7 फ़ायरवॉल का भी उपयोग करता है।

-Arjen

9

डॉकर के संस्करण 2 के साथ-साथ उसी नेटवर्क में मौजूद 'सेवाओं' (कंटेनर) को डिज़ाइन किया गया है जो डिफ़ॉल्ट रूप से उनके बीच जुड़े होते हैं।

जाँच करने के लिए है कि वे जुड़े हुए हैं अपने my-app कंटेनर से नीचे डोकर-compose.yml फ़ाइल

version: '2' 

services: 
    my-app: 
    image: tomcat:8.0 
    container_name: my-app1 
    links: 
     - my-redis 
    my-redis: 
    image: redis 
    container_name: my-redis1 

आप बस अपनी my-redis कंटेनर से ping my-app और ping my-redis निष्पादित कर सकते हैं का उपयोग करना।

उदाहरण के लिए:

$ docker-compose up -d 
$ docker exec -it my-app1 bash 
# ping my-redis 

आप नीचे दिए गए लिंक में उस के बारे में और अधिक जानकारी प्राप्त कर सकते हैं: https://blog.docker.com/2016/02/compose-1-6/ https://github.com/docker/compose/blob/master/docs/networking.md

+0

आपके उत्तर के लिए धन्यवाद। हालांकि मैं 'my-redis1' को ' my-app1 'और दूसरी तरफ। मैं केवल आईपी पते का उपयोग कर पिंग कर सकता हूं। ' my-redis1 'नाम' my-app1 'के/etc/hosts में नहीं दिखता है। जब मैं' डॉकर नेटवर्क 'की जांच करता हूं ls 'मुझे लगता है कि डॉकर-कंपोज़ ने एक नया नेटवर्क बनाया है। जब मैं संस्करण 1 डॉकर-कंपोज़ फ़ाइल का उपयोग करता हूं तो मुझे' my-red1 ''/my/app1 'की मेजबान फ़ाइल में' my-redis1 'दिखाई देता है। – user2030035

+0

PS साथ ही जब मैं संस्करण 2 डॉकर-कंपोज़ फ़ाइल से लिंक हटा देता हूं, तो मैं 'पिंग माई-रेडिस 1' का उपयोग करके 'my-app1' से 'my-redis1' पिंग नहीं कर सकता। – user2030035

+0

मुझे लगता है कि आपको कंटेनर नाम पर नहीं, सेवा नाम ('पिंग माय-एप') पर पिंग करना है। क्या आप दोबारा जांच कर सकते हैं कि मैंने जिस कमांड पर टिप्पणी की है, वह काम करता है? – JesusTinoco

संबंधित मुद्दे