पर डेटा सहेज नहीं रहा है। मैं एक MySQL डॉकर कंटेनर बनाने की कोशिश कर रहा हूं जो एक निश्चित स्कीमा और बीज डेटा के साथ प्रीसेट है ताकि मैं अन्य कंटेनर को डीबी के रूप में कनेक्ट कर सकूं। मैं आधार के रूप में trusted dockerfile/mysql image का उपयोग कर रहा हूं, और मैंने उस आधार से एक नई छवि बनाने के लिए एक डॉकरफ़ाइल लिखा और इसमें मेरी schema.sql जोड़ें। उस छवि (mysql: base) के निर्माण के बाद, मैं नए कंटेनर में बैश चलाने की कोशिश कर रहा हूं, फिर mysql में जाएं और अपना डेटाबेस बनाएं और फिर स्कीमा आयात करें। मैं फिर कंटेनर से बाहर निकलता हूं और कंटेनर को एक नई डॉकर छवि में करने की कोशिश करता हूं। हालांकि, परिणामस्वरूप छवि MySQL डीबी में किए गए किसी भी बदलाव को जारी नहीं रखती है। यह अन्य फाइलों को जारी रखता है जिन्हें मैंने कंटेनर में लिखा था, लेकिन डीबी नहीं।MySQL डॉकर कंटेनर नई छवि
यहां डॉकरफ़ाइल है जिसका उपयोग मैं प्रारंभिक छवि (myorg/mysql: base) बनाने के लिए करता हूं।
FROM dockerfile/mysql:latest
MAINTAINER (me)
ADD schema.sql /data/schema.sql
EXPOSE 3306
# Define working directory.
WORKDIR /data
CMD ["mysqld_safe"]
कि निर्माण के बाद, मैं छवि में जाना:
docker run -i -t myorg/mysql:base bash
और MySQL चलाने स्कीमा आयात करने के लिए:
myslqd_safe &
141218 00:15:56 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
mysql -u root
mysql> CREATE DATABASE mydb;
exit;
mysql -u root -D mydb < schema.sql
मैं mysql में जाने और स्कीमा सत्यापित कर सकते हैं कर दिया गया है आयातित सफलतापूर्वक:
mysql -u root -D mydb -e "SELECT * from tokens;"
इसके अलावा, अगर मैं /var/lib/mysql
में जाता हूं तो मैं देख सकता हूं कि mydb
निर्देशिका है जिसमें डीबी से संबंधित .frm फ़ाइलें शामिल हैं।
लेकिन जब मैं बाहर निकलें और एक नई छवि है कि कंटेनर प्रतिबद्ध करने के लिए प्रयास करें:
docker commit -m="import schema.sql" -a="Me" 72c2ff39dd65 myorg/mysql:seed
और फिर नई छवि में जाने:
docker run -i -t --rm myorg/mysql:seed bash
डाटाबेस फ़ाइलें नहीं रह गया है/var में हैं/lib/mysql, और mysql -u root -e "SHOW DATABASES"
चल रहा है mydb
डेटाबेस, केवल डिफ़ॉल्ट mysql
, information_schema
, और performance_schema
dbs दिखाता है। मैंने पाया कि अगर मैंने कंटेनर (echo 'test' > newfile
) में एक नया टेक्स्टफाइल बनाया है, तो वह फ़ाइल प्रतिबद्ध छवि में मौजूद होगी, लेकिन डीबी नहीं।
मुझे आश्चर्य है कि इस तथ्य के साथ कुछ करने के लिए क्या है कि विश्वसनीय छवि डॉकरफ़ाइल VOLUME ["/etc/mysql", "/var/lib/mysql"]
है इसलिए यह डीबी निर्देशिका को वॉल्यूम के रूप में माउंट करता है। माई डॉकरफाइल में यह आदेश नहीं है, लेकिन मुझे नहीं पता कि यह विरासत में है या नहीं (मैं वास्तव में समझ नहीं पा रहा हूं कि वॉल्यूम कितनी अच्छी तरह से काम करता है यह जानने के लिए कि यह मेरे निर्माण को कैसे प्रभावित कर सकता है)। मुझे वॉल्यूम के रूप में घुड़सवार डीबी की आवश्यकता नहीं है क्योंकि मुझे नेटवर्क कनेक्शन पर कनेक्ट करने के लिए एक और कंटेनर चाहिए (मैं इसके लिए डॉकर लिंक का उपयोग करने जा रहा हूं)।
FWIW, मैं ओएस एक्स 10.9.5 पर boot2docker 1.3.2 चला रहा हूं।
एफवाईआई आधिकारिक MYSQL कंटेनर यहां https://registry.hub.docker.com/_/mysql/ है जिसे आपने –