2015-10-02 6 views
27

यह सवाल डोकर के भंडार पर एक मुद्दा से आ रही है:
https://github.com/docker/compose/issues/942मैं केवल डॉकर-compose.yml का उपयोग कर डेटा-कंटेनर कैसे बना सकता हूं?

मैं इसे समझ नहीं डोकर लिखें के साथ एक डेटा कंटेनर (कोई प्रक्रिया चल) बनाने का तरीका।

+0

डॉकर 1.9 के रूप में, डेटा-केवल कंटेनरों को नामित कंटेनर के साथ प्रतिस्थापित किया जा सकता है https://github.com/docker/docker/issues/17798 –

+0

यदि आप होस्ट माउंट पॉइंट निर्दिष्ट करने के लिए नामित वॉल्यूम का उपयोग करना चाहते हैं, तो इसे देखें: https: // stackoverflow।कॉम/प्रश्न/35841241/डॉकर-रचना-नाम-घुड़सवार-मात्रा –

उत्तर

24

बिल्कुल यह कैसे करें यह आपके डेटा-केवल-कंटेनर के लिए उपयोग की जाने वाली छवि पर थोड़ा सा निर्भर करता है। अगर आपकी छवि में entrypoint है, तो आपको इसे अपने docker-compose.yml में ओवरराइट करना होगा।

DatabaseData: 
    image: mysql:5.6.25 
    entrypoint: /bin/bash 

DatabaseServer: 
    image: mysql:5.6.25 
    volumes_from: 
    - DatabaseData 
    environment: 
    MYSQL_ROOT_PASSWORD: blabla 

जब आप इस पर एक docker-compose up करते हैं, आप ..._DatabaseData_1 की तरह एक कंटेनर जो Exited की स्थिति को दर्शाता है जब आप docker ps -a फोन मिल जाएगा: उदाहरण के लिए इस डोकर केंद्र की ओर से आधिकारिक MySql छवि के लिए एक समाधान है। docker inspect के साथ आगे की जांच से पता चलता है कि इसमें 0 का टाइमस्टैम्प है। इसका मतलब है कि कंटेनर कभी नहीं चला था। जैसे डॉकर कम्पोज़ here के मालिक द्वारा यह कहा गया है।

अब तक, जब तक आप docker-compose rm -v नहीं करते हैं, तो आपका डेटा केवल कंटेनर (..._DatabaseData_1) अपना डेटा नहीं खोलेगा। तो आप जितनी बार चाहें docker-compose stop और docker-compose up कर सकते हैं।

यदि आप एक समर्पित डेटा-केवल छवि का उपयोग करना चाहते हैं जैसे tianon/true यह वही काम करता है। यहां आपको entrypoint को ओवरराइट करने की आवश्यकता नहीं है, क्योंकि यह अस्तित्व में नहीं है। ऐसा लगता है कि उस छवि और डॉकर रचना के साथ कुछ समस्याएं हैं। मैंने कोशिश नहीं की है, लेकिन this article किसी भी समस्या का सामना करने के मामले में पढ़ने योग्य हो सकता है।

सामान्यतः ऐसा लगता है कि आप अपने डेटा-केवल कंटेनर के लिए उसी छवि का उपयोग करना चाहते हैं जिसका उपयोग आप कंटेनर तक पहुंचने के लिए कर रहे हैं। अधिक जानकारी के लिए Data-only container madness देखें।

+0

मुझे समझ में नहीं आता है। वॉल्यूम मेजबान फाइल सिस्टम में एक निर्देशिका है जो एक कंटेनर में मैप हो जाती है, है ना? यहां मात्रा कहाँ है? – CrabMan

+0

@ क्रैबमन [MySQL छवि] (https://github.com/docker-library/mysql/blob/2e80e5ff6aa7d3a09723ad40f5954a0563dbac29/5.7/Dockerfile) में एक वॉल्यूम निर्दिष्ट है। [volumes_from] (https://docs.docker.com/compose/compose-file/) डॉकर को उस वॉल्यूम को डेटाबेसडेटा कंटेनर पर मैप करने के लिए कहता है। – JayChase

+0

@ क्रैबमा, कंटेनर के अंदर देखो जिसमें वॉल्यूम_फ्रॉम विकल्प है (आपके मामले में MySQL कंटेनर)/रन # डॉकर mysql_container निरीक्षण करें और ब्लॉक माउंट्स [{स्रोत: ""}] देखें। "स्रोत" यह कंटेनर डेटा के मेजबान पर आपका पथ है – yuklia

0

ओपी के सवाल से अंक में उल्लेख के रूप में:

  • आप या तो एक docker-compose.yml में विनिर्दिष्ट ही नाम के साथ एक डेटा कंटेनर बनाने, और docker-compose up --no-recreate चलाने (एक docker-compose.yml में निर्दिष्ट नहीं किया जाएगा पुनर्निर्मित किया जाना चाहिए)।
  • या आप एक साधारण कमांड के साथ एक कंटेनर चलाते हैं जो कभी वापस नहीं आता है।
    तरह: tail -f /dev/null
1

एक डेटा केवल कंटेनर (DOC) के एक कंटेनर है कि एक मात्रा प्रदाता के रूप में सेवा करने के लिए ही बनाया जाता है। volumes_from निर्देश का उपयोग कर कंटेनर के पास कोई अन्य कार्य नहीं है, अन्य कंटेनर इसके वॉल्यूम को माउंट कर सकते हैं।

डीओसी को वॉल्यूम बनाने के लिए केवल एक बार चलाना है। अन्य कंटेनर वॉल्यूम्स को संदर्भित कर सकते हैं भले ही यह बंद हो।

ओपी प्रश्न: docker-compose.yml प्रत्येक बार जब आप docker-compose up करते हैं तो डीओसी शुरू होता है। ओपी create_only: true विकल्प के किसी प्रकार का उपयोग करके केवल कंटेनर और वॉल्यूम बनाने के लिए एक विकल्प मांगता है, और इसे चलाता नहीं है।

संबंधित मुद्दे

 संबंधित मुद्दे