मैं खुद को इस स्थिति में पाता हूं, कि मैं किसी सेवा को अस्थायी रूप से किसी docker-composeफ़ाइल में अक्षम करना चाहता हूं ।
बेशक मैं इसे टिप्पणी कर सकता था, लेकिन क्या सिर्फ " enabled: false" कहने का कोई विकल्प है ?
मैं खुद को इस स्थिति में पाता हूं, कि मैं किसी सेवा को अस्थायी रूप से किसी docker-composeफ़ाइल में अक्षम करना चाहता हूं ।
बेशक मैं इसे टिप्पणी कर सकता था, लेकिन क्या सिर्फ " enabled: false" कहने का कोई विकल्प है ?
--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
जवाबों:
आप बस उस चीज़ को किसी चीज़ से बदलने के लिए entrypointयाcommand जिसमें कुछ भी नहीं है ( /bin/true) को फिर से परिभाषित कर सकते हैं
इससे कंटेनर कुछ भी नहीं करते हुए तुरंत बाहर निकल जाएगा।
shadi टिप्पणियों में निम्नलिखित युक्तियां जोड़ता है:
यदि आप नहीं चाहते हैं कि सेवा पूरी तरह से निर्मित हो जाए, तो बिल्ड कुंजी को
Dockerfileकेवल उसी को इंगित करने के लिए फिर से परिभाषित करें :
FROM tianon/true
ENTRYPOINT ["/true"]
5andr0 बताते टिप्पणी में शीर्ष स्तर के खंडx-disabled: (एक विस्तार क्षेत्र की तरह)
अधिक सुविधाजनक: अक्षम सेवाओं को शीर्ष-स्तरीय अनुभाग के
x-disabled:बजाय स्थानांतरित करनाservices:
x-उपसर्ग के साथ अनुभागों को पार्स किया जाएगा, लेकिन अगर इसे विस्तार क्षेत्र के रूप में इच्छित तरीके से उपयोग नहीं किया गया है तो इसे अनदेखा कर दिया जाएगा।
restart: "no"अनंत
x-disabled:इसके बजाय अक्षम सेवाओं को शीर्ष स्तर के खंड में ले जानाservices:
आप इसे एक 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"]
export XXX_ENTRYPOINT=/bin/true docker-compose v3 के साथ हम env का उपयोग विकलांग सेवा के लिए कर सकते हैं, अर्थात: तब `प्रविष्टि बिंदु: [" $ {XXX_ENTRYPOINT: -docker-entrypoint.sh} "]`
मैं उस अतिरिक्त पंक्ति को उस सेवा में जोड़ता हूं जिसे मैं अस्थायी रूप से अक्षम करना चाहता हूं:
command: echo "{put your service name here} disabled"
यह वैसे भी शुरू होता है, लेकिन कुछ भी नहीं करता है।
commandप्रवेश बिंदु पर पुन: परिभाषित करने का प्रभाव नहीं पड़ता है। अपने उदाहरण में आप भरोसा करते हैं कि entrypointक्या bashमुझे लगता है। इस लचीला बनाने के लिए (अंतर्निहित entrypoint) से स्वतंत्र मुझे लगता है कि आपको प्रवेश बिंदु को फिर से परिभाषित करने की आवश्यकता है, न कि कमांड।
डॉकर कंपोज याम फाइल में परिभाषित सेवा को निष्क्रिय करने का कोई तरीका नहीं है। VonC का सुझाव एक अच्छा समाधान है। कृपया नीचे दिए गए विकल्पों के लिए डॉक्यूमेंट लिखें https://docs.docker.com/compose/compose-file/
मैं सेवा को 0 प्रतिकृतियों के साथ स्केल करूंगा: परिनियोजित: प्रतिकृतियां: 0
दुर्भाग्य से जैसा कि दस्तावेज में कहा गया है कि यह केवल docker swarm के साथ काम करता है।
मैं समझ गया:
docker-compose up $(yq -r '.services | keys | join(" ")' docker-compose.yml | sed 's/service-name//')
आदिम लेकिन #सेवा की प्रत्येक पंक्ति की शुरुआत में जोड़ें ।
docker-compose upइसे चलाते हैं तो यह सभी सेवाओं को डिफ़ॉल्ट रूप से शुरू कर देगा। हालाँकि, यदि आपdocker-compose up myserviceइसे चलाते हैं तो यह myservice और उस पर निर्भर चीजों को शुरू कर देगा। निर्भरता की स्थापना करके आप इसे बना सकते हैं ताकि खराब सेवा इस कमांड से शुरू न हो। आप अपनीdocker-compose runइच्छित सेवाओं को प्राप्त करने के लिए भी कर सकते हैं। सही विकल्प यह भी हो सकता है कि आप अपनी जरूरत के लचीलेपन की अनुमति देने के लिए इसे कई कंपोज फाइल में तोड़ दें।