डॉकर डिटैच्ड मोड


84

डॉकटर दुनिया में अलग क्या है? मैं इस लेख लिंक को पढ़ता हूं , लेकिन यह बिल्कुल स्पष्ट नहीं करता है कि अलग मोड का क्या मतलब है।

जवाबों:


141

आप एक -dविकल्प के साथ एक अलग कंटेनर में डॉक कंटेनर शुरू कर सकते हैं । तो कंटेनर शुरू होता है और पृष्ठभूमि में चलता है। इसका मतलब है, आप कंटेनर शुरू करते हैं और अन्य कमांड के लिए स्टार्टअप के बाद कंसोल का उपयोग कर सकते हैं।

अलग मोड के विपरीत अग्रभूमि मोड है। वह डिफ़ॉल्ट मोड है, जब -dविकल्प का उपयोग नहीं किया जाता है। इस मोड में, आप जिस कंसोल को निष्पादित करने के लिए उपयोग कर रहे हैं, वह docker runमानक इनपुट, आउटपुट और त्रुटि से जुड़ा होगा। इसका मतलब है कि आपका कंसोल कंटेनर की प्रक्रिया से जुड़ा हुआ है।

अलग मोड में, आप अपने डॉक कंटेनर के मानक आउटपुट का अनुसरण कर सकते हैं docker logs -f <container_ID>

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


नमस्ते, आपने जो कहा, उसके बारे में क्या भ्रम है - और डॉकटर प्रलेखन क्या कहता है "आप ... अन्य कमांड के लिए स्टार्टअप के बाद हेट कंटेनर का उपयोग कर सकते हैं"। जाहिर है, अग्रभूमि में, आप अन्य कमांड के लिए कंटेनर का उपयोग कर रहे हैं यदि आपके पास -it है और आप एक प्रॉम्प्ट पर हैं। अभी भी -d की परिभाषा के लिए खोज ...
ब्रायन Bulkowski

3
@BrianBulkowski - कि यह जवाब बिल्कुल नहीं कहता है। वाक्यांश "... स्टार्टअप के बाद कंसोल का उपयोग कर सकता है ..." का मतलब है कि टर्मिनल जिससे आपने डॉक कंटेनर लॉन्च किया था, वह अभी भी एक नियमित शेल के रूप में उपयोग करने योग्य है, जबकि बैकग्राउंड में डॉक कंटेनर चलता है।
बेकार

क्या आप किसी फ़ाइल में लॉग आउटपुट को भी पाइप कर सकते हैं? अगर मुझे डॉक लॉग्स -f <कन्टेनरी_आईडी> कहा जाता है, तो मेरा टर्मिनल एक के बाद एक लाइन में पागल प्रिंटिंग चला रहा है।
Jürgen K.

@ JürgenK। मुझे पता चला कि आप बस कर सकते हैं docker logs -f [container_ID] > logs.txt। यदि यह नीचे दिए गए कार्य को जोड़ने का प्रयास नहीं करता है, तो नीचे @BMitch द्वारा सुझाए गए डॉकटर कंटेनर को शुरू करते समय ध्वज।
सानलोक ली

@ सनलोक ली। धन्यवाद। क्या डॉकर लॉग फ़ाइल की संख्या को सीमित करना संभव है? आकार तेजी से शांत हो जाता है, मुझे इसे साफ करने की आवश्यकता है
जुरगेन के।

29

Docker कमांड लाइन पर डिटैच ऑप्शन बताता है कि docker क्लाइंट ( docker) सर्वर ( dockerd) से रिक्वेस्ट करेगा , और फिर क्लाइंट तब बाहर निकलेगा जब तक कि सर्वर पर रिक्वेस्ट जारी रहती है। भ्रम का हिस्सा यह हो सकता है कि डॉकटर एक एकल प्रक्रिया की तरह दिखता है, जहां वास्तव में यह एक क्लाइंट / सर्वर एप्लिकेशन है, जहां क्लाइंट सर्वर पर हर कमांड भेजने के लिए REST API पर सिर्फ एक पतली सीमारेखा है।

एक के साथ docker container run --detach, इसका मतलब है कि कंटेनर बनाया जाएगा, सर्वर एक सफल होने पर कंटेनर आईडी के साथ प्रतिक्रिया देगा, और कंटेनर सर्वर पर चलना जारी रखेगा, जबकि आप अन्य कमांड चलाने के लिए स्वतंत्र हैं। यह अक्सर एक सर्वर (जैसे नगनेक्स) के लिए उपयोग किया जाता है जिसे आप अन्य कमांड को जारी रखने के दौरान पृष्ठभूमि में शुरू करना चाहते हैं। ध्यान दें कि आप अभी भी कंटेनर --interactiveऔर -ttyविकल्पों (अक्सर संक्षिप्त -it) के साथ कॉन्फ़िगर कर सकते हैं और बाद में docker container attachपहले से चल रहे कंटेनर से कनेक्ट करने के लिए चला सकते हैं। (ध्यान दें, जब तक आप कंटेनर के साथ नहीं जुड़ते, तब तक -itdस्टड से पढ़ने के लिए कंटेनर द्वारा किसी भी प्रयास को लटका दिया जाएगा, इनपुट के अंत को देखने के बजाय जो अक्सर बस से गुजरने पर तत्काल बाहर निकलता है -d।)

यदि आप डिटैच ऑप्शन के बिना चलते हैं, तो क्लाइंट तुरंत कंटेनर बनाए जाने के बाद एक अटैच एपीआई कॉल चलाएगा ताकि आप आउटपुट देख सकें और वैकल्पिक रूप से कंटेनर पर रनिंग प्रोसेस को इनपुट प्रदान कर सकें। यह तब उपयोगी होता है जब आपका कंटेनर कुछ संवादात्मक (जैसे /bin/bash) चल रहा हो ।

कई अन्य कमांड अलग करने के विकल्प की अनुमति देते हैं, जिसमें docker-compose up -dएक पूरी परियोजना शुरू करना और इसे पृष्ठभूमि में सर्वर पर चलना छोड़ना होगा। docker serviceसेवा के लक्ष्य स्थिति बनाने या अपडेट करने के लिए सर्वर में परिवर्तन सबमिट करने के बाद या तो बहुत सी कमांड होंगी, या यदि आप अलग नहीं होते हैं, तो ग्राहक तब तक इंतजार करेगा जब तक सेवा की वर्तमान स्थिति लक्ष्य स्थिति से मेल नहीं खाती और आप देख सकते हैं तैनाती की प्रगति। docker serviceआदेशों के साथ ध्यान दें , आपको --detach=falseसंलग्न रहने के लिए पास करना पड़ सकता है , आपके संस्करण के आधार पर व्यवहार पिछले एक साल में बदल गया है।


1
IMO, यह भी उल्लेख करने के लिए समझ में आता है कि कैसे एक संलग्न कंटेनर से अंतःक्रियात्मक रूप से अलग हो सकता है ( CTRL-p CTRL-q , --detach-keys)
लियोन

@ अच्छी सलाह, लेकिन यह सुनिश्चित करें कि आप कंटेनर के साथ संलग्न हैं --interactiveऔर --tty(उर्फ -it) उस काम के लिए।
BMitch

1
धन्यवाद @BMitch! मुझे लगता है कि मैं अब समझ गया हूं।
VSO

1
अच्छी तरह से समझाया @BMitch, काश डॉक्स यह पूरी तरह से हो सकता है!
रवि तिवारी

-6
docker run -d -t ubuntu:14.04

docker run - docker कंटेनर से docker की इमेज से एक उदाहरण बनाएं। (यदि छवि स्थानीय रूप से उपलब्ध नहीं है तो यह docker हब से खींचती है) ubuntu - छवि का नाम

14.04 - टैग

-d, --detach - डिटैच मोड

-टी, शेट्टी - एक छद्म-टीटीवाई आवंटित करें


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