मैं docker- रचना में hostname कैसे सेट करूँ?


120

मेरी docker-compose.ymlफ़ाइल में, मेरे पास निम्नलिखित है। हालाँकि कंटेनर होस्टनाम मान नहीं उठाता है। कोई विचार?

dns:
  image: phensley/docker-dns
  hostname: affy
  domainname: affy.com
  volumes:
    - /var/run/docker.sock:/docker.sock

जब मैं कंटेनर में होस्टनाम की जांच करता हूं तो यह नहीं उठाता है affy


1
आप किस संस्करण का उपयोग कर रहे हैं?
कोजिरो

जवाबों:



57

यह सही ढंग से काम करने लगता है। अगर मैंने आपका कॉन्फ़िगर फाइल में डाल दिया है:

$ cat > compose.yml <<EOF
dns:
  image: phensley/docker-dns
  hostname: affy
  domainname: affy.com
  volumes:
    - /var/run/docker.sock:/docker.sock
EOF

और फिर चीजों को लाएं:

$ docker-compose -f compose.yml up
Creating tmp_dns_1...
Attaching to tmp_dns_1
dns_1 | 2015-04-28T17:47:45.423387 [dockerdns] table.add tmp_dns_1.docker -> 172.17.0.5

और फिर कंटेनर के अंदर होस्टनाम की जांच करें, सब कुछ ठीक लगता है:

$ docker exec -it stack_dns_1 hostname
affy.affy.com

1
आप किस संस्करण का उपयोग कर रहे हैं?
कोजिरो

यह प्रारूप डॉकटर-कम्पोज़ के नवीनतम संस्करण में काम नहीं करता है। वाईएमएल फाइलें बारीक चीजें हैं; क्या आप सुनिश्चित हैं कि यह dns के लिए सही प्रारूप है?
जॉर्ज स्टॉकर

3
YML फाइलें वास्तव में वह सब कुछ नहीं है। "काम नहीं करता" का क्या मतलब है? के अनुसार डॉक्स , दोनों hostnameऔर domainnameमान्य हैं docker-compose.ymlविकल्प। अपडेट: अभी-अभी परीक्षण किया गया है, अभी भी ठीक काम करने के लिए लगता है (docker- रचना संस्करण 1.4.2, docker संस्करण 1.8.2)।
लार्क्स नोव

क्या इस होस्टनाम को डॉकटर वातावरण के बाहर उजागर करने का कोई तरीका है? यह अच्छा होगा अगर मेजबान अपने डीएनएस नाम से डॉकटर कंटेनरों तक पहुंच सकता है।
पॉल प्रीत

1
यह संभव है, और शायद इसके लायक ही सवाल है। यदि आप "docker dns" खोजते हैं तो आपको कई प्रासंगिक परिणाम मिलेंगे; पहले वहाँ क्या है पर एक नज़र रखना।
लार्क्स

53

मैंने पाया कि होस्टनाम का उपयोग करते समय अन्य कंटेनरों को दिखाई नहीं दे रहा था docker run। यह एक ज्ञात मुद्दा (शायद अधिक ज्ञात विशेषता) निकला , चर्चा का हिस्सा होने के साथ:

हमें शायद होस्टनाम का उपयोग करने के बारे में डॉक्स के लिए एक चेतावनी जोड़ना चाहिए। मुझे लगता है कि यह शायद ही उपयोगी है।

कंटेनर नेटवर्किंग के संदर्भ में - एक होस्टनाम निर्दिष्ट करने का सही तरीका - एक उपनाम को परिभाषित करना है:

services:
  some-service:
    networks:
      some-network:
        aliases:
          - alias1
          - alias2

दुर्भाग्य से यह अभी भी साथ काम नहीं करता है docker run। कन्टेनर को कंटेनर को एक नाम देना है:

docker-compose run --name alias1 some-service

और alias1फिर अन्य कंटेनरों से पिंग किया जा सकता है।

अद्यतन: जैसा कि @grilix बताते हैं, आपको docker-compose run --use-aliasesपरिभाषित उपनाम उपलब्ध कराने के लिए उपयोग करना चाहिए ।


11
मैं उस समस्या से फंसा हुआ हूं कि मैं अन्य कंटेनरों से hosname द्वारा कंटेनर तक नहीं पहुंच सकता। और आप पूरे इंटरनेट में केवल एक ही व्यक्ति हैं जिसने इस समस्या को बताया .. 20 घंटे पहले से
गुगली कर रहा था

7
मुझे भी! यह पागल है कि लाखों डेवलपर्स डॉकर का उपयोग करते प्रतीत होते हैं, लेकिन किसी को नहीं पता कि एक बॉक्स को एक साधारण नाम कैसे दिया जाए, यहां तक ​​कि ऑफ़िसियल डॉक्स भी नहीं। बहुत बहुत धन्यवाद :)
शालिक

1
बस मामले में, अब हम के --use-aliasesसाथ उपयोग कर सकते हैं docker-compose run। यह runकमांड पर उपनाम को हार्डकोड करने से बच जाएगा
ग्रिलिक्स

38

डॉक दस्तावेज़ के आधार पर: https://docs.docker.com/compose/compose-file/#/command

मैं बस hostname: <string> अपने docker- रचना फ़ाइल में डाल दिया ।

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

[...]

lb01:
  hostname: at-lb01
  image: at-client-base:v1

[...]

और कंटेनर lb01 at-lb01होस्टनाम के रूप में चुनता है ।


यदि आपके पास डॉकटर-कंपोज़ फ़ाइल में कई कंटेनर हैं, तो क्या आप प्रत्येक कंटेनर के लिए होस्टनाम सेट करेंगे? यह बहुत अक्षम लगता है?
vgoklani

6
यदि आपको कंटेनर के लिए प्रसिद्ध नामों की आवश्यकता है जो एक व्यवहार्य समाधान है।
मार्सेलो रोमानी

9

सबसे आसान तरीका मैं पाया है बस में कंटेनर नाम सेट करने के लिए है docker-compose.ymlदेखें container_name प्रलेखन। यह डॉकटर-कंपोजर v1 + पर लागू होता है। यह कंटेनर से कंटेनर के लिए काम करता है, मेजबान मशीन से कंटेनर तक नहीं।

services:
  dns:
    image: phensley/docker-dns
    container_name: affy

अब आपको affyकंटेनर नाम का उपयोग करके अन्य कंटेनरों से एक्सेस करने में सक्षम होना चाहिए । मुझे विकास के माहौल में कई रेडिस सर्वरों के लिए ऐसा करना पड़ा।

नोट समाधान तब तक कार्य करता है जब तक आपको स्केल करने की आवश्यकता न हो। जैसे सुसंगत व्यक्तिगत डेवलपर वातावरण।


में Compose 3.7एक ही रास्ता मैं डेटाबेस सेवा होस्ट नाम एक ही ढेर के एक और सेवा कंटेनर के भीतर से देखा जा करने के लिए मिल गया होस्ट नाम के रूप में सेवा के नाम पर किया गया था। hostname:संपत्ति का उपयोग करना विफल रहा। पर्यावरण का उपयोग करना HOSTNAME = निर्माण भी विफल रहा।
स्टीफन

एक अन्य समाधान जो काम भी करता था, वह था समाधान aliasesमें वर्णित संपत्ति का उपयोग करना foz
स्टीफन

1
यह बहुत अच्छा काम करता है, लेकिन थोड़ा गड़बड़ है - अब मुझे सेटिंग में container_nameऔर hostnameउसी मूल्य को प्राप्त करने के लिए लिया गया है जिसकी मुझे आवश्यकता है
ओलिवर डेंगी

3

मुझे काम करने वाले kdc रखने के लिए फ्रीपा कंटेनर को स्पिन करने की आवश्यकता थी और इसे होस्टनाम देना होगा अन्यथा यह नहीं चलेगा। आखिरकार मेरे लिए क्या काम किया गया था HOSTNAMEरचना में env चर सेट कर रहा है :

version: 2
services:
  freeipa:
    environment:
      - HOSTNAME=ipa.example.test

अब इसका काम:

docker exec -it freeipa_freeipa_1 hostname
ipa.example.test

2
मेरे लिए, स्लिम का उपयोग करते हुए, एक HOSTNAME पर्यावरण चर में परिणाम होता है जिसका कंटेनर के वास्तविक होस्टनाम पर बिल्कुल भी कोई प्रभाव नहीं पड़ता है
ओलिवर डेंगी

2
हालांकि यह आपके द्वारा उपयोग किए जा रहे कंटेनर के साथ काम कर सकता है, पर्यावरण निर्देश केवल कंटेनर के लिए चर को उजागर करता है। यह अभी भी कंटेनर पर निर्भर है कि वह निर्धारित मूल्य के साथ कुछ करे। कई मामलों में यह संभवत: कुछ नहीं करेगा।
MrJohnBBQ

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