क्या मुझे डॉकटर-कंपोज़ का उपयोग करना चाहिए या चलाना चाहिए?


129

क्या runकिसी docker-compose.ymlफ़ाइल को शुरू करने के लिए उपयोग करने का कोई कारण है या आपको बस उपयोग करना चाहिए up?

मैं समझता हूं कि runएक विशिष्ट कंटेनर को शुरू किया जा सकता है, लेकिन मैं उस मामले का उल्लेख कर रहा हूं जहां आप इसे कंटेनर को निर्दिष्ट किए बिना उपयोग करते हैं ताकि यह आपके सभी yml कंटेनरों को शुरू करे।

जवाबों:


141

जैसा कि 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:


27

मैं इंगित करना चाहता हूं कि यदि आप pdb डीबगर के साथ पायथन का उपयोग कर रहे हैं:

import pdb; pdb.set_trace()

यदि आप अपनी स्क्रिप्ट का उपयोग करते हैं तो यह शेल पर नहीं जाएगा:

docker-compose up

हालाँकि यदि आप रन का उपयोग करते हैं, तो यह डिबगर से अपेक्षित रूप से नीचे गिर जाएगा:

docker-compose run

7

डॉक डॉक्स का जवाब है ।

आमतौर पर, आप चाहते हैं docker-compose upupA में परिभाषित सभी सेवाओं को शुरू करने या फिर से शुरू करने के लिए उपयोग करें docker-compose.yml। डिफ़ॉल्ट "संलग्न" मोड में, आप सभी कंटेनरों से सभी लॉग देखते हैं। "अलग" मोड में ( -d), कंटेनरों को शुरू करने के बाद लिखें, लेकिन कंटेनर बैकग्राउंड में चलते रहते हैं।

docker-compose runआदेश "एक बंद" या "सहारा" में चल रहे कार्यों के लिए है। इसके लिए उस सेवा नाम की आवश्यकता होती है जिसे आप चलाना चाहते हैं और केवल उन सेवाओं के लिए कंटेनर शुरू करते हैं, जो चल रही सेवा पर निर्भर करती है। run परीक्षण चलाने या डेटा वॉल्यूम कंटेनर में डेटा निकालने या जोड़ने जैसे एक प्रशासनिक कार्य करने के लिए उपयोग करें । runकमांड तरह docker run -tiसे कार्य करता है कि यह कंटेनर के लिए एक इंटरैक्टिव टर्मिनल खोलता है और कंटेनर में प्रक्रिया की निकास स्थिति से मेल खाती एक निकास स्थिति देता है।


1
यह स्वीकृत उत्तर होना चाहिए। मूल रूप से, docker-compose runएक रनिंग सर्विस के खिलाफ कमांड निष्पादित करने के लिए, और docker-compose upएक नई सर्विस स्पॉन करने के लिए उपयोग करें ।
goonerify करें
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.