यहां समझाने के लिए बहुत कुछ है, लेकिन मैं इसी तरह की समस्या के लिए अपने पिछले उत्तरों में से एक को लिंक करूंगा - चरण वास्तव में समान हैं क्योंकि केवल डेटाबेस सेवा और पृष्ठभूमि भिन्न होती है।
1) पहली बात यह है कि आपको एक बैश स्क्रिप्ट प्रदान करनी होगी जो तब तक प्रतीक्षा करेगी जब तक कोई सेवा http के माध्यम से प्रतिक्रिया नहीं देगी। डेटाबेस में यह आमतौर पर तब होता है जब DB जाने के लिए तैयार होता है और सभी आरंभीकरण किए जाते हैं।
विष्णुबोब . द्वारा लिखित वेट-फॉर-it.sh स्क्रिप्ट अपने इसके लिए प्रतीक्षा करें . में रेपो @ जीथब।
2) दूसरी बात, आपको उस स्क्रिप्ट को प्रत्येक कंटेनर के अंदर लाना होगा जिसके लिए आपके DB की आवश्यकता है।
3) तीसरा, आप एक entrypoint
निर्दिष्ट करते हैं आपकी कंपोज़ फ़ाइल में, जो वास्तविक command
. से पहले प्रतीक्षा स्क्रिप्ट निष्पादित करेगी आपकी सेवा चलाने से ट्रिगर होगा।
एक प्रवेश बिंदु का उदाहरण (जिस उत्तर से मैं लिंक करता हूं उसके संदर्भ में)
docker-entrypoint.sh:
#!/bin/bash
set -e
sh -c './wait-for-it.sh oracle:3306 -t 30'
exec "[email protected]"
इन सभी चरणों को यहां परिदृश्य 2 में विस्तार से समझाया गया है, मैं यहां जिस उत्तर की ओर इशारा कर रहा हूं, उसके अंदर मेरे दूसरे उत्तर के संदर्भ से अवगत रहें। यह समस्या शुरुआती लोगों के लिए एक बहुत ही सामान्य समस्या है और इसमें काफी स्पष्टीकरण की आवश्यकता होती है, इसलिए मैं इसे यहां पोस्ट नहीं कर सकता।
नोट यहां depends_on
. के संबंध में जो आपको लगता है कि इस समस्या के लिए डॉकर से मूल समाधान है - दस्तावेज़ राज्य के रूप में, यह केवल कंटेनर चलने तक प्रतीक्षा करता है, वास्तव में इसकी आंतरिक नौकरियां समाप्त नहीं होती है - डॉकर को पता नहीं है कि कितना किया जाना है।