जैसा कि docker-compose run
(2015) में उल्लेख किया गया है
रन द्वारा पास की गई कमांड सेवा कॉन्फ़िगरेशन में परिभाषित कमांड को ओवरराइड करती है ।
उदाहरण के लिए, यदि वेब सेवा कॉन्फ़िगरेशन के साथ शुरू किया गया है bash
, तो docker-compose run web python app.py
इसके साथ ओवरराइड करता है python app.py
।
दूसरा अंतर यह है docker-compose run
आदेश बंदरगाहों सेवा विन्यास में निर्दिष्ट के किसी भी पैदा नहीं करता ।
यह पहले से खुले बंदरगाहों के साथ पोर्ट टकराव को रोकता है। यदि आप चाहते हैं कि सेवा के पोर्ट बनाए जाएँ और होस्ट को मैप करें, तो --service- पोर्ट्स फ्लैग निर्दिष्ट करें:
$ docker-compose run --service-ports web python manage.py shell
इसलिए जब तक आपको उन विशिष्ट आवश्यकताओं (एक कमांड को ओवरराइड करना या विभिन्न बंदरगाहों पर केवल एक कंटेनर चलाना) नहीं है, तब docker-compose up
तक (एक कंटेनर के लिए भी) पर्याप्त है।
क्या आप यह समझाने में मदद कर सकते हैं कि आप पोर्ट कब और क्यों नहीं बनाना चाहेंगे? यही कारण है कि या जब वे पहले से ही खुले बंदरगाहों के साथ संघर्ष कर सकते हैं
केवल इसलिए docker-compose run
कि आपकी सेवाओं के लिए वन-ऑफ कमांड चलाने के लिए बनाया गया है।
इसका मतलब है कि, यदि आपने पहले से ही एक किया है, तो आपके docker-compose up
सभी कंटेनर पहले से ही उनके निर्दिष्ट बंदरगाहों पर चल रहे हैं docker-compose.yml
।
एक कर docker-compose run
इस स्तर पर (एक बंद आदेश पर अमल करने के लिए) है, अगर यह एक ही बंदरगाह का सम्मान किया गया था, तुरंत विफल हो जाएगा। इसलिए उन बंदरगाहों का डिफ़ॉल्ट गैर-निर्माण।
एक अन्य उपयोग का मामला ( कम्पोज़ एनवायरनमेंट वेरिएबल्स रेफरेंस में ):
यह देखने के लिए कि सेवा के लिए कौन से पर्यावरण चर उपलब्ध हैं, चलाएं docker-compose run SERVICE env
।
उन कमांड्स के सबसे हालिया (2019+) संस्करण निम्नलिखित हैं docker/docker.github.io
:
docker-compose run
एक रनिंग सर्विस के खिलाफ कमांड निष्पादित करने के लिए, औरdocker-compose up
एक नई सर्विस स्पॉन करने के लिए उपयोग करें ।