सबसे पहले, आपकी समस्या है Dockerfile:
RUN service mysql restart && /tmp/setup.sh
डॉकर छवियां चल रही प्रक्रियाओं को नहीं बचाती हैं। इसलिए, आपकी RUNकमांड केवल docker buildचरण के दौरान निष्पादित होती है और निर्माण पूरा होने के बाद बंद हो जाती है। इसके बजाय, आपको कमांड निर्दिष्ट करने की आवश्यकता है जब कंटेनर को नीचे की तरह CMDया ENTRYPOINTकमांड का उपयोग करना शुरू किया जाता है :
CMD mysql start
दूसरे, डॉकटर कंटेनर को चालू रखने के लिए एक प्रक्रिया (अंतिम कमांड) की आवश्यकता होती है, अन्यथा कंटेनर बाहर निकल जाएगा / बंद हो जाएगा। इसलिए, सामान्य service mysql startकमांड को सीधे डॉकरफाइल में उपयोग नहीं किया जा सकता है।
उपाय
प्रक्रिया को चालू रखने के तीन विशिष्ट तरीके हैं:
यह अक्सर तब पसंद किया जाता है जब आपके पास एकल सेवा चल रही हो क्योंकि यह आउटपुट लॉग को डॉक करने के लिए सुलभ बनाता है।
यह तभी काम करता है जब कोई स्क्रिप्ट हो mysqld_safe।
यह सबसे अच्छा है अगर कमांड को चरणों की एक श्रृंखला /start.shकरनी चाहिए , फिर से, चलना चाहिए।
ध्यान दें
शुरुआत के लिए उपयोग करने supervisordकी अनुशंसा नहीं की जाती है। ईमानदारी से, यह ओवरकिल है। कंटेनर के लिए एकल सेवा / एकल आदेश का उपयोग करना बेहतर है।
BTW: कृपया संदर्भ के लिए मौजूदा mysql docker की छवियों के लिए https://registry.hub.docker.com देखें