डॉक रन क्या है?


108

मैं डॉकटर के साथ कुछ जटिल चीजें कर रहा था, लेकिन जैसा कि मुझे पता नहीं है कि -itध्वज का क्या मतलब है। हाल ही में मैं docker runकमांड के कुछ उदाहरण पर आया हूं जिसने मुझे थोड़ा भ्रमित किया है।

docker run -itd ubuntu:xenial /bin/bash 

मेरा सवाल यह है कि -itअगर तात्कालिकता के दौरान कंटेनर को यहां झंडा लिखना समझ में आता हैbin/bash

प्रलेखन में हमारे पास एक उदाहरण है

docker run --name test -it debian

स्पष्टीकरण के साथ

-यह कंटेनर के स्टड से जुड़ा एक छद्म-टीटीवाई आवंटित करने के लिए डॉकर को निर्देश देता है; कंटेनर में एक इंटरैक्टिव बैश शेल बनाना।

और मदद पृष्ठ से -t झंडा के लिए स्पष्टीकरण

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

अगर मैं -it ध्वज को हटाता हूं

docker run -d ubuntu:xenial /bin/bash

मेरा नव निर्मित कंटेनर इतना नहीं रहता है

में docker ps -a

यह बाहर के रूप में निर्दिष्ट है

क्षमा करें, यदि मेरा प्रश्न काफी मूर्खतापूर्ण है, तो मुझे इंटरनेट पर स्पष्टीकरण नहीं मिल सकता है (मुझे उस बिंदु की महत्वपूर्ण गलतफहमी है)।


यदि /bin/bashस्टड पर कोई सामग्री उपलब्ध नहीं है, तो इसके पास चलाने के लिए कोई कमांड नहीं है और उपयोगकर्ता को संकेत देने का कोई तरीका नहीं है, इसलिए यह बाहर निकलता है। यह 100% सामान्य और अपेक्षित व्यवहार है।
चार्ल्स डफी

जवाबों:


97

-it--interactive + --ttyजब आप docker runइस आदेश के साथ कम होते हैं .. तो यह आपको सीधे कंटेनर के अंदर ले -dजाता है , जहां यह छोटा होता है, --detachजिसका अर्थ है कि आप कंटेनर चलाते हैं और फिर इससे अलग होते हैं, इसलिए मूल रूप से आप पृष्ठभूमि में कंटेनर चलाते हैं .. संपादित करें: तो यदि आप डॉकटर कंटेनर चलाते हैं तो -itdयह -itविकल्प चलाएगा और आपको कंटेनर से अलग कर देगा, इसलिए आपका कंटेनर अभी भी पृष्ठभूमि में चल रहा है, बिना किसी डिफ़ॉल्ट एप्लिकेशन को चलाने के लिए।


यह सही उत्तर नहीं है, क्योंकि मेरे कंटेनर को बिना किसी विकल्प के चलाने के बाद बंद कर दिया गया है।
एलेक्स

1
इसका मतलब है कि आपके कंटेनर में कोई त्रुटि है .. इसलिए आपका कंटेनर प्रारंभ करने में विफल है ... या हो सकता है कि उसके पास CMDडिफ़ॉल्ट रूप से कोई आदेश नहीं है , इसलिए उसने डिफ़ॉल्ट रूप से कोई भी ऐप नहीं चलाया है। .तो यदि आप इसे पृष्ठभूमि में चलाते हैं, तो यह तुरंत बाहर हो जाएगा क्योंकि यह करने के लिए कोई काम नहीं है। ।
फेंडी जटमिको

@ एलेक्स, अगर आपके कंटेनर में प्रोग्राम कुछ ऐसा है जो स्टड बंद होने पर बाहर निकलता है, तो आपका जवाब है (जैसे यह क्यों नहीं चलेगा -i)। इसी प्रकार, यदि यह कमांड चलाता है जो अलग-अलग व्यवहार करता है, चाहे वह TTY हो, तो आप की उपस्थिति के आधार पर अलग व्यवहार प्राप्त कर सकते हैं -t
चार्ल्स डफी

@ एलेक्स, ... और स्पष्ट होने के लिए, /bin/bash </dev/nullतुरंत बाहर निकलता है, अगर आप इसे डॉकर के बिना चलाते हैं। docker runबिना चलाए -iही उस प्रति की नकल bashकरना शुरू कर देता है। (इसके बिना -t, इसमें एक स्टडिन है, लेकिन एक टीटीवाई नहीं है, इसलिए यह खुद को एक इंटरैक्टिव शेल के रूप में नहीं पहचानता है, इसलिए आपको व्यवहार का थोड़ा अलग सेट मिलता है)।
चार्ल्स डफी

1
@AdmiralAdama, क्या रंग समस्या को हल करता है -t विकल्प है। रंग के टोकन को समझने के लिए TTY की आवश्यकता होती है।
kroiz

42

docker run -it ubuntu:xenial /bin/bashइंटरैक्टिव मोड (इसलिए -itध्वज) में कंटेनर को शुरू करता है जो आपको /bin/bashकंटेनर के साथ बातचीत करने की अनुमति देता है । इसका मतलब है कि अब तुम होगा bashसत्र के अंदर कंटेनर तो आप कर सकते हैं, ls, mkdir, या कंटेनर के अंदर किसी भी पार्टी आदेश है।

यहाँ कुंजी "इंटरैक्टिव" शब्द है। यदि आप ध्वज को छोड़ देते हैं, तो कंटेनर अभी भी निष्पादित होता है, /bin/bashलेकिन तुरंत बाहर निकल जाता है। ध्वज के साथ, कंटेनर निष्पादित होता है /bin/bashफिर धैर्य से आपके इनपुट की प्रतीक्षा करता है।


1
क्या मैं -t ध्वज का उपयोग करने की आवश्यकता है? docker run -i ubuntu:xenial /bin/bash
एलेक्स

3
-t: छद्म ट्टी, या "छद्म टर्मिनल"। टर्मिनल के बिना, आप कंटेनर को इनपुट नहीं भेज सकते।
15

docker run -it ubuntu:xenial उत्तर के लिए धन्यवाद, लेकिन मेरे पास इस आदेश के साथ एक टर्मिनल सत्र होगा जो खरोंच से भी होगा (इसके लिए मुझे बिन / बैश चलाने की आवश्यकता है)। यह एक टर्मिनल सत्र भी बनाता है
एलेक्स

1
तुम सही हो। मैं अपने शब्द वापस लूंगा। -tटैग के बिना एक अभी भी कंटेनर के साथ बातचीत कर सकता है, लेकिन इसके साथ, आपके पास एक अच्छा, अधिक सुविधाओं वाला टर्मिनल होगा। आप अंतर को देखने के लिए -iऔर उसके साथ दौड़ सकते हैं -it
DVnguyen

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