2016-02-17 7 views
16

मैंने कुछ googling किया और कोई मामला नहीं मिला है जहां मैं docker run -it some_image के बजाय docker run -i some_image चलाऊंगा।मैं डॉकर कंटेनर में `--tty` के बिना` --interactive` का उपयोग कब करूं?

यदि मैं docker run -i --name sample some_image bash चलाता हूं, तो कंटेनर अग्रभूमि में चलता है, लेकिन मैं उस शेल से इसके साथ बातचीत नहीं कर सकता हूं। मैं इसे CTRL + C से भी रोक नहीं सकता। हालांकि, मैं एक और खोल खोल सकता हूं और docker exec -it sample bash चला सकता हूं और कंटेनर तक पहुंच प्राप्त कर सकता हूं।

यदि मैं docker run -i -d --name sample some_image bash चलाता हूं, तो कंटेनर तुरंत बाहर निकलता है। मैं इसे docker start sample के साथ पुनरारंभ कर सकता हूं और फिर यह रहता है, इसलिए मैं docker exec -it sample bash चला सकता हूं और फिर से इसके साथ बातचीत कर सकता हूं।

हालांकि, इन सभी मामलों में, मैं अंततः -it का उपयोग करके अपने कंटेनरों से बातचीत करने के लिए समाप्त होता हूं। मुझे किस दुनिया में -t ध्वज की आवश्यकता नहीं होगी?

चीयर्स

+0

द्वितीय को समझ नहीं सकता क्या उम्मीद होगी '-i -d' – Auzias

+2

@Auzias '-i -d' का परिणाम उदाहरण में है, मैं नीचे https://github.com/docker/docker/blob/e4cfd9b3924fae0369956b4f0e7f73a7e3b0cbf7/integration-cli/docker_cli_attach_test.go#L139 के साथ लिंक करता हूं : आप एक प्रक्रिया को लॉन्च और डिटेच करते हैं, जिसमें आप डेटा के साथ कहा प्रक्रिया को खिलाने के लिए संलग्न कर सकते हैं और stdin का उपयोग कर सकते हैं। – VonC

उत्तर

16

-i के बाद से, अगर संलग्न नहीं STDIN भी खोलने रहता है यह संरचना (पाइपिंग) के लिए अनुमति देता है।
उदाहरण के लिए:

docker run ubuntu printf "line1\nline2\n" | docker run -i ubuntu grep line2 | docker run -i ubuntu sed 's/line2/line3/g' 

(स्रोत: issue 14221)

या:

$ echo hello | docker run -i busybox cat 
    hello 

(स्रोत: issue 12401)

अब एक कुंजीपटल के सामने नहीं इस कल्पना और एक स्क्रिप्ट है जहाँ आप वास्तव में कुछ की तुलना में एक खोल | बेहतर माध्यम से stdin प्रक्रियाओं को लिख सकते हैं में इस्तेमाल किया जा रहा है: उदाहरण के integration-cli/docker_cli_attach_test.go

+0

क्या आप चरण-दर-चरण बता सकते हैं कि पहले स्निपेट में वास्तव में क्या चल रहा है? क्या यह 3 अलग कंटेनर बनाने का अंत करता है? क्या 'printf "line1 \ nline2 \ n" 'पहले कंटेनर के अंदर चलाता है? कंसोल होस्ट करने के लिए पहला कंटेनर '" line1 \ nline2 \ n "' लिखता है? "हैलो" प्रिंट करने के बाद कंटेनर बाहर निकलें? – gisek

+1

@gisek 3 कंटेनर उत्तराधिकार में चलाए जाते हैं, प्रत्येक टोम अपने 'इको'/'sed' ऑपरेशन के ठीक बाद समाप्त होता है ..' -i' stdin को पिछले कंटेनर द्वारा उत्पादित स्टडआउट प्राप्त करने की अनुमति देता है। – VonC

+0

धन्यवाद। सब खत्म होने के बाद, क्या हम 3 नव निर्मित बंद कंटेनरों के साथ खत्म हो जाते हैं? – gisek

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