डॉक रन उबंटु / बिन / बैश बनाम डॉक रन उबंटु


15

डॉकर संस्करण 17.06.0-सी.ई.

मैं एक वीडियो कोर्स देखकर डॉकर का अध्ययन कर रहा हूं।

व्याख्याता दिखाता है:

sudo docker run -ti ubuntu /bin/bash

छवि ubuntu के साथ डॉक चलाएँ। और मुझे क्या परेशानी है /bin/bash\man docker runदिखाता है कि /bin/bashएक कमांड है। यही कारण है docker run IMAGE [COMMAND]। ठीक है, यह ठीक है। लेकिन इनमें क्या अंतर है

sudo docker run -ti ubuntu 

तथा

sudo docker run -ti ubuntu /bin/bash

मेरे लिए कोई नहीं है। और व्याख्याता कमांड पर ध्यान केंद्रित नहीं करता है। उन्होंने कहा कि हम सिर्फ रन बनाने वाले हैं। यह पाठ्यक्रम में उनका पहला आदेश था। और फिर वह दिखाता है कि हम मेजबान मशीन से अलग हो गए हैं, हम स्वतंत्र रूप से बर्बाद कर सकते हैं जो हम बिना किसी नुकसान के चाहते हैं (जैसे आरएम -आरएफ / बिन)।

मैंने जाँचा:

$ sudo docker run -ti ubuntu
root@aaf7cd26fe18:/# echo $SHELL
/bin/bash


$ sudo docker run -ti ubuntu /bin/bash
root@6b2570958216:/# echo $SHELL
/bin/bash

खैर, अपने लिए मैंने इस /bin/bashहिस्से को कचरा समझ कर फेंकने का फैसला किया ।

लेकिन वैसे भी मैंने आपसे पूछने का फैसला किया: हो सकता है कि डॉकर चलाने के दो तरीकों में कुछ अंतर हो? अगर है, तो क्या है?

जवाबों:


11

डॉकर चित्र निर्दिष्ट कर सकते हैं कि एक निश्चित कमांड को डिफ़ॉल्ट रूप से चलाया जाना है, डॉकरफाइल में निर्देश का उपयोग करतेCMD हुए । तथा:

यदि उपयोगकर्ता तर्कों को निर्दिष्ट करता है, docker runतो वे निर्दिष्ट डिफ़ॉल्ट को ओवरराइड करेंगे CMD

जैसा कि होता है, Ubuntu Dockerfile के लिए निर्दिष्ट डिफ़ॉल्ट कमांड , वास्तव में, बैश है:

CMD ["/bin/bash"]

तो, उबंटू छवि के विशिष्ट मामले के लिए, docker run ... ubuntu /bin/bashइससे अलग नहीं है docker run ... ubuntu

बेशक, यह हमेशा सच नहीं होना चाहिए। डेटाबेस इंजन के लिए Dockerfile डिफ़ॉल्ट रूप से डेटाबेस कमांड चला सकता है। उस स्थिति में, यदि आपको एक इंटरैक्टिव शेल की आवश्यकता है, तो आपको करना होगा docker run ... /bin/bash

सामान्य तौर पर, आप यह नहीं मान सकते हैं कि docker runआपको एक इंटरैक्टिव शेल मिलेगा। /bin/bashयदि आपको शेल की आवश्यकता है तो यह निर्दिष्ट करना सुरक्षित है ।


2

जब आप कमांड प्रदान नहीं करते हैं, जो आपके मामले में है /bin/bash, तो -ti( iइंटरेक्टिव, tटर्मिनल) का उपयोग करते समय आपको डिफ़ॉल्ट प्रोग्राम से जोड़ा जाएगा जिसे runकमांड का उपयोग करते समय निष्पादित करने के लिए परिभाषित किया गया है DockerFile

उदाहरण के लिए, यदि कोई चित्र अग्रभूमि पर एक वेब सर्वर चलाता है, तो आप उस वेब सर्वर के लॉग के runबिना उपयोग करने के बाद क्या देखेंगे /bin/bash(डिफ़ॉल्ट प्रोग्राम जो चलाया गया है)।

कमांड को निर्दिष्ट करते समय, आप बता रहे हैं कि मुझे परवाह नहीं है कि क्या चल रहा है या छवि पर चल रहा है मुझे इस "कमांड" को चलाकर एक इंटरैक्टिव टर्मिनल दें।

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

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