पुनः आरंभ करने पर डेटा-मशीन स्पष्ट डेटा क्यों करती है?


9

मैं OSX पर डॉकर टूलबॉक्स का उपयोग कर रहा हूं।

मैंने लगातार डेटा संग्रहीत करने के लिए एक डेटा वॉल्यूम कंटेनर बनाया है: https://docs.docker.com/userguide/dockervolumes/#creating-and-mounting-a-data-volume-container

मैंने जाँच की कि यह डेटा वास्तव में boot2docker VM (docker- मशीन द्वारा बनाया गया) पर संग्रहीत है न कि कंटेनर पर, ताकि यह बनी रहे। हालांकि "docker- मशीन पुनरारंभ" इस कस्टम डेटा को vm पर हटाता है।

मैं क्या हो रहा है पर प्रलेखन नहीं मिल सकता है। मैंने पाया कि एक मंच पोस्ट ने उस डेटा को / var / lib / docker में संरक्षित किया होगा, लेकिन मुझे यह बताते हुए कोई आधिकारिक डॉक्स नहीं मिला और यह भी अजीब लगता है कि ऊपर दिए गए लगातार स्टोरेज गाइड को देखते हुए इस रास्ते का उपयोग नहीं किया जाता है या इसका उल्लेख नहीं किया जाता है आपका डेटा हटा दिया जाएगा।

क्या यह अपेक्षित है और यदि लगातार डेटा संग्रहीत करने के लिए सही रास्ते पर कोई आधिकारिक दस्तावेज है?


संपादित करें: असफल सेनारियो का उदाहरण जोड़ना

$ docker-machine ssh alt
docker@alt:~$ docker run -v /data:/var/lib/mysql --name mydata busybox sh -c "echo 'hello' > /var/lib/mysql/hello"
docker@alt:~$ docker run --rm --volumes-from mydata busybox sh -c "cat /var/lib/mysql/hello"
hello
docker@alt:~$ exit
$ docker-machine restart alt
Starting VM...
$ docker-machine ssh alt
docker@alt:~$ docker run --rm --volumes-from mydata busybox sh -c "cat /var/lib/mysql/hello"
cat: can't open '/var/lib/mysql/hello': No such file or directory

जवाबों:


8

यह निश्चित रूप से काम करना चाहिए:

$ docker-machine ssh default
docker@default:~$ docker run -v /data --name mydata busybox true
docker@default:~$ docker run --volumes-from mydata busybox sh -c "echo hello >/data/hello"
docker@default:~$ docker run --volumes-from mydata busybox cat /data/hello
hello
docker@default:~$ exit
$ docker-machine restart default
Starting VM...
$ docker-machine ssh default
docker@default:~$ docker run --volumes-from mydata busybox cat /data/hello
hello

क्या आप अपनी समस्या को पुन: पेश करने के लिए अधिक विस्तृत कदम उठा सकते हैं?

boot2docker में केवल पढ़ने के लिए एक फाइलसिस्टम है (रिबूट पर मिटा दिया जाएगा) इसके अपवाद के साथ:

  1. कंटेनर और उनका डेटा (वॉल्यूम) - यह वही है जिसके बारे में आपने पढ़ा है /var/lib/docker
  2. डॉकटर चित्र
  3. डॉकर विन्यास (जैसे /var/lib/boot2docker/profileकि डेमॉन झंडे को ट्विक किया जा सकता है)

नमस्ते, मैंने अभी आपकी प्रतिक्रिया को संपादित करने का सुझाव दिया है। क्या आपका मतलब दूसरे और चौथे रन कमांड में व्यस्त बॉक्स छवि को निर्दिष्ट करना है? ऐसा करने के बिना डॉकटर "श" और "कैट" नामक छवियों को डाउनलोड करने की कोशिश करता है, जो मुझे संदेह है कि आप क्या इरादा नहीं है। मैं ऊपर एक असफल उदाहरण जोड़ूंगा।
गेरी

आपके सहयोग के लिए धन्यवाद। आप और @ mc0e दोनों ने इस एक के साथ मदद की है इसलिए मैंने आपको टिक और उसे बाउंटी (साथ ही दोनों के लिए +1) दिया है। मुझे उम्मीद है कि आप इस मेले पर विचार करेंगे।
गेरी

1
आह हाँ, गलत टाइप किया हुआ। टाइपो के लिए क्षमा करें।
नथानलेक्लेयर

कोई माफी आवश्यक नहीं मैं सिर्फ यह सुनिश्चित करने के लिए दोहरी जांच कर रहा था कि मुझे गलत नहीं समझा गया था। इस के लिए आपकी मदद के लिए चीयर्स।
गेरी

6

मैं बूट 2 डॉक का उपयोग नहीं करता, लेकिन अगर / डेटा रिबूट पर मिटा दिया जाता है docker run -v /data:/var/lib/mysql, तो यह वह जगह है जहां आपका वॉल्यूम संग्रहीत किया जा रहा है ( ), इसलिए यह खो जाएगा।

आप जो कर रहे हैं वह वॉल्यूम दृढ़ता को संभालने के लिए दो अलग-अलग पैटर्न का संयोजन भी कर रहा है। दृढ़ता प्राप्त करने के लिए, कंटेनर मेजबान सिस्टम पर एक निर्दिष्ट स्थान से संस्करणों को माउंट कर सकते हैं (जो निरंतर होना माना जाता है), या वे एक डेटा कंटेनर के साथ जुड़ा हो सकता है, और इसके साथ माउंट किया जा सकता है --volumes-from। ऐसा लगता है कि मेजबान फाइलसिस्टम दृष्टिकोण बूट 2 डॉक के लिए उपयुक्त नहीं है, और आपको डेटा वॉल्यूम पैटर्न (केवल) का उपयोग करना चाहिए।

संभवतः आप के -v /var/lib/mysqlबजाय के साथ अपने डेटा कंटेनर बनाना चाहिए -v /data:/var/lib/mysql


-V फ्लैग का उपयोग करके वॉल्यूम बनाना और फिर अन्य कंटेनरों में उस कंटेनर से वॉल्यूम का उपयोग करना --volumes-from से बिल्कुल वैसा ही है जैसा कि प्रलेखन से पता चलता है: docs.docker.com/userguide/dockervolumes/… मुझे उम्मीद है कि अगर -v / स्थान जानता है कि यह / var / lib / docker / संस्करणों के सापेक्ष होना चाहिए फिर एक कॉलोन को जोड़ने से इसे बदलना नहीं चाहिए। बहुत कम से कम यह unintuitive है। -v / var / lib / mysql! = -v / var / lib / mysql: / var / lib / mysql ऐसा लगता है जैसे mysql- docker
गेरी

आपके सहयोग के लिए धन्यवाद। आप और @nathanleclaire दोनों ने इसमें मदद की है इसलिए मैंने आपको इनाम दिया है (जैसा कि इसके लायक है) और मैंने टिक को nathanleclaire (साथ ही दोनों के लिए +1) दिया। मुझे आशा है कि आपको लगता है कि यह उचित है।
गेरी

@ गेरी निश्चित रूप से एक वॉल्यूम बना रही है और फिर इसके माध्यम से --volumes-from का उपयोग करने की सलाह दी जाती है। अपने कंटेनर पर पंचांग / डेटा माउंट करना नहीं है।
mc0e

हाँ मुसीबत यह है कि मुझे पता नहीं था / डेटा तब तक अल्पकालिक था जब तक मैं पुनः आरंभ नहीं करता।
गेरी

0

ध्यान दें कि मैं मैक बीटा के लिए docker का उपयोग कर रहा हूं जो xhyve vm का उपयोग कर रहा है।

मशीन के पुनरारंभ के बीच / var / lib / boot2docker की सामग्री बनी रहेगी। इसलिए यदि आप चाहते हैं कि आपके vm पर उपलब्ध कुछ फाइलें उन्हें इस निर्देशिका में डालें।

यदि आप चाहते हैं कि वे डॉक कंटेनर चलाने के लिए एक अलग स्थान पर सुलभ हों तो आप निम्नलिखित को / var / lib / boot2docker / profile में जोड़ सकते हैं:

mkdir -p /desired/path
ln -s /var/lib/boot2docker/your.file /desire/path/your.file

यदि आप सिस्टम फाइल में अन्य विन्यास जोड़ना चाहते हैं जो vm रिस्टार्ट के बीच बनी रहेगी जैसे कि आपकी मेजबानों की फाइल में अतिरिक्त मान हैं तो आप नीचे दिए गए कमांड जैसे / var / lib / boot2docker / प्रोफाइल को जोड़ सकते हैं:

echo '127.0.0.1 your.domain.com' >> /etc/hosts

आशा है ये मदद करेगा

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.