डॉकटर-कंपोज में एक नामांकित वॉल्यूम के लिए होस्ट पर पथ कैसे सेट करें


87

नीचे दिया गया उदाहरण dbdata नाम का वॉल्यूम बनाता है और इसे db सेवा के अंदर संदर्भित करता है :

version: '2'
services:
  db:
    image: mysql
    volumes:
      - dbdata:/var/lib/mysql
volumes:
  dbdata:
    driver: local

( https://stackoverflow.com/a/35675553/4291814 से )

मैं वॉल्यूम चूक के लिए पथ देख सकता हूं:

/var/lib/docker/volumes/<project_name>_dbdata

मेरा सवाल यह है कि dbdataवॉल्यूम के लिए होस्ट पर पथ कॉन्फ़िगर कैसे करें ?


नए / उचित तरीके के लिए मेरा जवाब देखें -> stackoverflow.com/a/61743638/5079799
FreeSoftwareServers

जवाबों:


76

localवॉल्यूम ड्राइवर के साथ मनमानी माउंट का उपयोग करने की क्षमता आती है; बाइंड माउंट का उपयोग करके आप वास्तव में इसे प्राप्त कर सकते हैं।

एक नामित मात्रा को स्थापित करने के लिए /srv/db-data, जो आपके ऊपर docker-compose.ymlचढ़ेगी, इस तरह दिखेगा:

version: '2'
services:
  db:
    image: mysql
    volumes:
      - dbdata:/var/lib/mysql
volumes:
  dbdata:
    driver: local
    driver_opts:
      type: 'none'
      o: 'bind'
      device: '/srv/db-data'

मैंने इसे कंपोज फाइल फॉर्मेट के वर्जन 2 के साथ टेस्ट नहीं किया है, लेकिन https://docs.docker.com/compose/compose-file/compose-versioning/#version-2 इंगित नहीं करता है, कि यह काम नहीं करना चाहिए।

मैंने इसे विंडोज पर भी नहीं देखा है ...


3
आप उस से कहीं अधिक सरल वाक्यविन्यास के साथ एक बाँध माउंट का उपयोग कर सकते हैं: वॉल्यूम: --/dbdata:/var/lib/mysql। बाइंड माउंट के साथ एकमात्र 'समस्या' यह है कि यह एक नामित मात्रा के विपरीत, स्वचालित रूप से कंटेनर सामग्री को होस्ट में कॉपी नहीं करेगा। docs.docker.com/compose/compose-file/#volumes
मिकी

13
ओपी ने विशेष रूप से नामित संस्करणों के बारे में पूछा , कि सबसे आसान तरीके से एक बांध माउंट का उपयोग कैसे करें। यदि आप किसी नामित वॉल्यूम के लिए पथ को कॉन्फ़िगर करना चाहते हैं, तो आप इसे बाइंड माउंट के साथ प्राप्त कर सकते हैं, जैसा कि ऊपर दिखाया गया है। नामित संस्करणों का उपयोग करने से यह फायदा होता है कि आप उन्हें अपने docker-compose.yml पर पुनः उपयोग कर सकते हैं।
क्रिश्चियन उलब्रिच

1
@ मिकी ने एक प्रश्न पोस्ट किया है जिसमें आपकी पहली टिप्पणी के बारे में स्पष्टता दी गई है: stackoverflow.com/questions/65176940/… । यदि आप उत्तर दे सकते हैं तो अत्यधिक सराहना करेंगे। धन्यवाद।
धन्यवाद_दिनांक

1
@thanks_in_advance - ऐसा लगता है कि मैं इसे पीट रहा हूँ! मुझे टैगिंग के लिए tyvm
मिकी

1
@ मिकी टिप्पणी के माध्यम से वहाँ चर्चा में जोड़ने के लिए स्वतंत्र महसूस हो रहा है।
धन्यवाद_दिनेश

9

नामित संस्करणों का स्थान docker द्वारा प्रबंधित किया जाता है; यदि आप अपने आप को स्थान निर्दिष्ट करना चाहते हैं, तो आप होस्ट निर्देशिका को "माउंट माउंट" कर सकते हैं, या वॉल्यूम प्लगइन का उपयोग कर सकते हैं जो आपको एक पथ निर्दिष्ट करने की अनुमति देता है।

आप हाल ही में पोस्ट किए गए एक अन्य उत्तर में कुछ विवरण पा सकते हैं; https://stackoverflow.com/a/36321403/1811501


1
वास्तव में आपको बस localवॉल्यूम प्लगइन का उपयोग करना होगा , जो कि डॉकटर के साथ आपूर्ति की जाती है; एक उदाहरण के लिए मेरा जवाब देखें।
ईसाई उलब्रिच

-2

जैसा कि docker-compose v3.2आप अब इसे निम्नानुसार कर सकते हैं:

नोट: कई, जैसा कि मैंने सोचा कि अगर आप version: "3"इसे लगाते हैं तो यह सबसे नया / नवीनतम V3 का उपयोग करेगा, यह इसका उपयोग नहीं करता है v3.0, आप न्यूनतम 3.2विन्यास विधि का उपयोग करने के लिए न्यूनतम निर्दिष्ट करें ।

https://docs.docker.com/compose/compose-file/#volumes

version: "3.2"
services:
  db:
    image: postgres:latest
    volumes: 
      - type: volume
        source: /opt/db/vols/dbdata
        target: /var/lib/postgresql/data
        volume:
          nocopy: true



volumes:
   dbdata:

ध्यान दें:

दिखाए गए संस्करणों को शीर्ष-स्तरीय वॉल्यूम कुंजी के तहत सूचीबद्ध किया जाना चाहिए, जैसा कि दिखाया गया है।


क्षमा करें, अगर मुझे आपका जवाब @FreeSoftwareServer समझ में नहीं आया, तो यहाँ सवाल यह है कि "हम फ़ोल्डर को होस्ट करने के लिए संस्करणों का नाम कैसे दे सकते हैं"?
धीरज कुमार

मैंने अपने उत्तर को आसान बनाने की कोशिश की, शायद आपके विशिष्ट मुद्दे के साथ एक नया प्रश्न शुरू करें। @ धीरज कुमार
FreeSoftwareServers

इसकी मात्रा के रूप में dbdataसेवा के लिए मैप कैसे किया जाता है db? @FreeSoftwareServers
नाम जी VU

स्रोत रेखा? @NamGVU शायद आपके विशिष्ट मुद्दे के साथ एक नया प्रश्न बेहतर होगा
FreeSoftwareServers

मुझे समझ नहीं आ रहा है? यह एक बहुत साफ है और `docker-compose.yml` में एक नामित मात्रा के लिए मेजबान के लिए एक रास्ता निर्धारित करने के लिए नया तरीका है
FreeSoftwareServers
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.