अपनी प्रविष्टि स्क्रिप्ट के शीर्ष पर एक चेक जोड़ें
डॉकर को वास्तव में एक नई सुविधा के रूप में इसे लागू करने की आवश्यकता है, लेकिन यहां उन स्थितियों के लिए एक और वैकल्पिक विकल्प है जिसमें आपके पास एक एंट्रीपॉइंट है जो सफलता या विफलता के बाद समाप्त हो जाता है, जिससे इसे डीबग करना मुश्किल हो सकता है।
यदि आपके पास पहले से कोई एंट्रीपॉइंट स्क्रिप्ट नहीं है, तो अपने कंटेनर के लिए जो भी कमांड (कमांड) चाहिए, उसे बनाएं। फिर, इस फ़ाइल के शीर्ष पर, इन पंक्तियों को जोड़ें entrypoint.sh
:
# Run once, hold otherwise
if [ -f "already_ran" ]; then
echo "Already ran the Entrypoint once. Holding indefinitely for debugging."
cat
fi
touch already_ran
# Do your main things down here
यह सुनिश्चित करने के लिए कि cat
कनेक्शन रखता है, आपको TTY प्रदान करने की आवश्यकता हो सकती है। मैं अपने Entrypoint स्क्रिप्ट के साथ कंटेनर चला रहा हूँ जैसे:
docker run -t --entrypoint entrypoint.sh image_name
यह स्क्रिप्ट को एक बार चलाने का कारण बनेगा, एक ऐसी फ़ाइल का निर्माण करेगा जो यह इंगित करता है कि यह पहले से ही चला गया है (कंटेनर के आभासी फाइल सिस्टम में)। आप डिबगिंग करने के लिए कंटेनर को पुनः आरंभ कर सकते हैं:
docker start container_name
जब आप कंटेनर को पुनरारंभ करते हैं, तो already_ran
फ़ाइल मिल जाएगी, जिससे एंट्रीपॉइंट स्क्रिप्ट को स्टाल किया जाएगा cat
(जो कि इनपुट के लिए हमेशा इंतजार करता है जो कभी नहीं आएगा, लेकिन कंटेनर को जीवित रखता है)। आप तब डिबगिंग bash
सत्र निष्पादित कर सकते हैं :
docker exec -i container_name bash
जब कंटेनर चल रहा होता है, तो आप स्क्रिप्ट को फिर already_ran
से हटाने और मैन्युअल रूप से निष्पादित कर सकते हैं entrypoint.sh
, यदि आपको उस तरह से डिबग करने की आवश्यकता है।