क्या किसी सेवा को docker-compose.yml में अक्षम करने का कोई तरीका है


91

मैं खुद को इस स्थिति में पाता हूं, कि मैं किसी सेवा को अस्थायी रूप से किसी docker-composeफ़ाइल में अक्षम करना चाहता हूं ।

बेशक मैं इसे टिप्पणी कर सकता था, लेकिन क्या सिर्फ " enabled: false" कहने का कोई विकल्प है ?


4
जवाब है: "यह निर्भर करता है" ... जिस पर आप पूरा करने की कोशिश कर रहे हैं। यदि आप docker-compose upइसे चलाते हैं तो यह सभी सेवाओं को डिफ़ॉल्ट रूप से शुरू कर देगा। हालाँकि, यदि आप docker-compose up myserviceइसे चलाते हैं तो यह myservice और उस पर निर्भर चीजों को शुरू कर देगा। निर्भरता की स्थापना करके आप इसे बना सकते हैं ताकि खराब सेवा इस कमांड से शुरू न हो। आप अपनी docker-compose runइच्छित सेवाओं को प्राप्त करने के लिए भी कर सकते हैं। सही विकल्प यह भी हो सकता है कि आप अपनी जरूरत के लचीलेपन की अनुमति देने के लिए इसे कई कंपोज फाइल में तोड़ दें।
पॉल बिकोटे

आदेश में एक समान की जरूरत है मैं था संभाल करने में, मैं के साथ खेलने depends_on और में सेवा तर्क डोकर-लिखें अप , या विकल्प --no-depsमामले में आप निर्भरता शुरू करने के लिए नहीं करना चाहती। मुझे पता है कि वह नहीं है जो आप ढूंढ रहे हैं, बल्कि दूसरा तरीका भी है।
गोंजालो

एक और विकल्प आपकी ज़रूरत के अनुसार बहुत सारे डॉकटर-कंपोज़ बनाए गए हैं, और उनमें से जो आप अपनी कॉल में शामिल करना चाहते हैं, चुनें docker-compose -f docker-compose.yml -f another-docker-compose.yml up -d। आप परिणामक कर्ता की जाँच कर सकते हैं विन्यास कमांड के साथ मर्ज की रचना करें :docker-compose -f docker-compose.yml -f another-docker-compose.yml config
गोंजालो


@ ईशानबंसल मुझे इस तरह की सुविधा के बारे में नहीं पता है।
VonC

जवाबों:


42

आप बस उस चीज़ को किसी चीज़ से बदलने के लिए entrypointयाcommand जिसमें कुछ भी नहीं है ( /bin/true) को फिर से परिभाषित कर सकते हैं

इससे कंटेनर कुछ भी नहीं करते हुए तुरंत बाहर निकल जाएगा।


shadi टिप्पणियों में निम्नलिखित युक्तियां जोड़ता है:

यदि आप नहीं चाहते हैं कि सेवा पूरी तरह से निर्मित हो जाए, तो बिल्ड कुंजी को Dockerfileकेवल उसी को इंगित करने के लिए फिर से परिभाषित करें :

FROM tianon/true 
ENTRYPOINT ["/true"]

5andr0 बताते टिप्पणी में शीर्ष स्तर के खंडx-disabled: (एक विस्तार क्षेत्र की तरह)

अधिक सुविधाजनक: अक्षम सेवाओं को शीर्ष-स्तरीय अनुभाग के x-disabled:बजाय स्थानांतरित करनाservices:

x-उपसर्ग के साथ अनुभागों को पार्स किया जाएगा, लेकिन अगर इसे विस्तार क्षेत्र के रूप में इच्छित तरीके से उपयोग नहीं किया गया है तो इसे अनदेखा कर दिया जाएगा।


15
मैं restart: "no"अनंत
पुनः आरंभ

2
यह इस मामले में मदद नहीं करता है कि जिस कारण से आप इस सेवा को अक्षम करना चाहते हैं, वह कारण यह है कि सेवा शुरू भी नहीं हो सकती है। मेरे मामले में, मैं पोस्टग्रैज शुरू नहीं करता क्योंकि पोस्टग्रेट्स के चलने का एक और उदाहरण है, और पोर्ट कमांड संघर्ष का कारण बनता है। मैं परिभाषा बदलना शुरू कर सकता था, लेकिन उस बिंदु पर पूरी बात करना आसान था।
ब्लूफैस्ट

1
अधिक सुविधाजनक: x-disabled:इसके बजाय अक्षम सेवाओं को शीर्ष स्तर के खंड में ले जानाservices:
5:52 बजे

@ 5andr0 दिलचस्प। क्या उस डॉकटर-कंपोज़ सेक्शन के लिए कोई डॉक्यूमेंटेशन है?
VonC

docs.docker.com/compose/compose-file/#extension-fields को v3.4 में पेश किया गया। एक्स-उपसर्ग के साथ अनुभागों को पार्स किया जाएगा, लेकिन अगर इसे एक विस्तार क्षेत्र के रूप में इच्छित तरीके से उपयोग नहीं किया गया है तो नजरअंदाज कर दिया गया है
5andr0

63

आप इसे एक docker-compose.override.yamlफ़ाइल में कर सकते हैं ।

यह फ़ाइल स्वचालित रूप से पढ़ी जाती है docker-composeऔर मुख्य में विलीन हो जाती है docker-compose.yaml

यदि आपने इसे Git से बाहर रखा है, तो प्रत्येक डेवलपर मूल को बदले बिना कॉन्फ़िगरेशन (कुछ सीमाओं के साथ) को ट्वीक कर सकता है docker-compose.yaml

इसलिए, सेवा fooको इसके प्रवेश बिंदु को फिर से परिभाषित करके तदर्थ अक्षम किया जा सकता है docker-compose.override.yaml:

version: "3"

services:
  foo:
    entrypoint: ["echo", "Service foo disabled"]

1
यदि आपके पास "पुनरारंभ: जब तक रोका नहीं गया" आदि टिप्पणी करते हैं, या यह लगातार पुनरारंभ होगा
एंड्रियास

ओवरराइड फ़ाइल में प्रविष्टि बिंदु को बदलने का विचार है। यदि आपने नीतियां फिर से शुरू की हैं, तो इसे एक अनंत नींद के पाश में बदल दें
कोस प्रोव

स्पष्ट करने के लिए, आप ऐसा कर सकते हैं dok-compose.yml जैसा कि VonC के उत्तर में है। यदि आप इसे चेक करना चाहते हैं और इसे अन्य डेवलपर्स के साथ साझा करना उचित होगा। इसके अलावा, फ़ाइल प्रारूप v1 लिखें "सेवाओं" के उपकुंजियों के बजाय शीर्ष-स्तरीय कुंजियों के रूप में सेवा नाम (ऊपर उदाहरण में फू) स्वीकार करता है।
डेनिस होवे

1
यह समाधान अच्छी तरह से काम करता है यदि किसी विशेष वातावरण (जैसे विकास / मंचन / उत्पादन) के लिए एक सेवा को अक्षम / सक्षम करने के लिए देख रहे हैं, जहाँ आपके पास -f विकल्प के साथ प्रत्येक वातावरण के लिए एक अलग ओवरराइड फ़ाइल निर्दिष्ट है।
जस्टिन एमरी

export XXX_ENTRYPOINT=/bin/true docker-compose v3 के साथ हम env का उपयोग विकलांग सेवा के लिए कर सकते हैं, अर्थात: तब `प्रविष्टि बिंदु: [" $ {XXX_ENTRYPOINT: -docker-entrypoint.sh} "]`
qxo

9

मैं उस अतिरिक्त पंक्ति को उस सेवा में जोड़ता हूं जिसे मैं अस्थायी रूप से अक्षम करना चाहता हूं:

command: echo "{put your service name here} disabled"

यह वैसे भी शुरू होता है, लेकिन कुछ भी नहीं करता है।


6
commandप्रवेश बिंदु पर पुन: परिभाषित करने का प्रभाव नहीं पड़ता है। अपने उदाहरण में आप भरोसा करते हैं कि entrypointक्या bashमुझे लगता है। इस लचीला बनाने के लिए (अंतर्निहित entrypoint) से स्वतंत्र मुझे लगता है कि आपको प्रवेश बिंदु को फिर से परिभाषित करने की आवश्यकता है, न कि कमांड।
ब्लूफैस्ट

4

डॉकर कंपोज याम फाइल में परिभाषित सेवा को निष्क्रिय करने का कोई तरीका नहीं है। VonC का सुझाव एक अच्छा समाधान है। कृपया नीचे दिए गए विकल्पों के लिए डॉक्यूमेंट लिखें https://docs.docker.com/compose/compose-file/



-2

मैं समझ गया:

docker-compose up $(yq -r '.services | keys | join(" ")' docker-compose.yml | sed 's/service-name//')

यह बिल्कुल वैसा ही है जैसा मैंने अनुरोध से उम्मीद की थी। यह आसान नहीं है, लेकिन यह मेरे मामले के लिए पर्याप्त रूप से काम करता है, और मैं इसे अपनी कुछ लिपियों में एकीकृत कर सकता हूं।
बिल किडवेल

-9

आदिम लेकिन #सेवा की प्रत्येक पंक्ति की शुरुआत में जोड़ें ।


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