डॉकर कंपोज़ संस्करण 2 "वॉल्यूम" सिंटैक्स को कैसे देखना चाहिए?

साथ में डॉकर रचना 1.1.6.0+, अब के लिए एक नया / संस्करण 2 फ़ाइल सिंटैक्स है docker-compose.yml फ़ाइल। परिवर्तनों में एक अलग शीर्ष स्तर की कुंजी शामिल है जिसका नाम है volumes. यह एक स्थान पर वॉल्यूम परिभाषाओं को "केंद्रीकृत" करने की अनुमति देता है ।

मैं क्या करने की कोशिश कर रहा हूँ नाम वहां वॉल्यूम और मेरे स्थानीय होस्ट डिस्क पर एक एकल वॉल्यूम संदर्भ एकाधिक पथ है । निम्नलिखित एक उदाहरण है, एक अपवाद के साथ फेंकना Traceback इसके साथ समाप्त होता है

AttributeError: 'list' object has no attribute 'items'

उदाहरण docker-compose.yml:

version: '2'services:  db:    image: postgres    volumes:      - database:/var/lib/postgres/data  php:    image: php-fpm:5.6    volumes:      - phpconf:/etc/php/conf.d  namedvolume:    container_name: namedvolume    build: ./Docker/Testvolume    volumes:       - ./Docker/Testvolume/sharemevolumes:  database:    - ./Docker/Postgres/db:ro    - ./Docker/Postgres/ini  phpconf:    - ./Docker/PHP-FPM/conf  singledir: ./Docker/foo  completemap: ./Docker/bar:/etc/service/conf.d  - namedvolume:/etc/service/conf.d # < this was a separate attempt w/o the other keys  … ?

अब तक मैं सभी के माध्यम से पढ़ा डॉकर कंपोज़ डॉक्स master- शाखा वॉल्यूम कॉन्फ़िगरेशन संदर्भ, डॉकर कंपोज़ डॉक्स वॉल्यूम / वॉल्यूम-ड्राइवर संदर्भ और के माध्यम से देखा GitHub उदाहरण अपेक्षित सही सिंटैक्स खोजने के लिए । ऐसा लगता है कि कोई भी पहले से ही (गिटहब) का उपयोग नहीं कर रहा है और दस्तावेज़ीकरण पूरा होने से बहुत दूर है (docker.com). मैंने एक अलग वॉल्यूम बनाने की भी कोशिश की service और इसे संदर्भ में volumes, लेकिन वह भी काम नहीं करता । इस वाक्यविन्यास पर कोई विचार कैसा दिखना चाहिए?

का उद्देश्य volumes कुंजी

यह वहाँ बनाने के लिए है नामित वॉल्यूम.

यदि आप करते हैं नहीं इसका उपयोग करें, फिर आप अपने वॉल्यूम के लिए हैशेड मानों के समूह के साथ खुद को पाएंगे । उदाहरण:

$ docker volume ls DRIVER              VOLUME NAMElocal               f004b95d8a3ae11e9b871074e9415e24d536742abfe86b32ffc867f7b7063e55local               9a148e167e1c722cbdb67c8edc36f02f39caeb2d276e9316e64de36e7bc2c35d

नामित वॉल्यूम के साथ, आपको निम्न जैसा कुछ मिलता है:

$ docker volume lslocal               projectname_someconflocal               projectname_otherconf

नामित वॉल्यूम कैसे बनाएं

docker-compose.yml सिंटैक्स है:

version: '2'services:    app:        container_name: app        volumes_from:            - appconf    appconf:        container_name: appconf        volumes:            - ./Docker/AppConf:/var/www/confvolumes:    appconf:networks:    front:        driver: bridge

यह ऊपर की तरह कुछ नामित वॉल्यूम दिखाया गया है ।

थोक में वॉल्यूम कैसे निकालें

जब आपके पास हैश का गुच्छा होता है, तो इसे साफ करना काफी कठिन हो सकता है । यहाँ एक एक लाइनर है:

docker volume rm $(docker volume ls |awk '{print $2}')

संपादित करें: जैसा कि @ आर्थर्टाका ने टिप्पणियों में बताया, याद रखने का एक आसान तरीका है:

docker volume rm $(docker volume ls -q)

नामित वॉल्यूम के बारे में विवरण कैसे प्राप्त करें

अब जब आपको अब हैश नहीं देखना है, तो आप उस पर जा सकते हैं और उन्हें उनके द्वारा बुला सकते हैं … नाम:

docker volume inspect <volume_name># Example:$ docker volume inspect projectname_appconf[    {        "Name": "projectname_appconf",        "Driver": "local",        "Mountpoint": "/mnt/sda1/var/lib/docker/volumes/projectname_appconf/_data"    }]

Sidenote: आप चाहते हो सकता है docker-compose down वॉल्यूम बनाने के लिए जाने से पहले एक नई शुरुआत करने के लिए आपकी सेवाएं ।

यदि आप उपयोग कर रहे हैं Boot2Docker/ डॉकर मशीन, आपको करना होगा docker-machine ssh और sudo -i एक करने से पहले ls -la /mnt/… उस वॉल्यूम का-आप होस्ट मशीन वीएम द्वारा प्रावधान किया गया है डॉकर मशीन.

संपादित करें: एक और एसओ पर नामित वॉल्यूम के बारे में संबंधित उत्तर.

जिस तरह से मैं इसे समझता हूं, आप वैश्विक उपयोग कर सकते हैं volumes: अनुभाग के लिए

  • वॉल्यूम नाम परिभाषित करें
  • एक अलग वॉल्यूम नाम के तहत एक नामित वॉल्यूम उपलब्ध कराएं
  • नामित वॉल्यूम के लिए ड्राइवर और ड्राइवर विकल्प निर्दिष्ट करें

जब तक आप निर्दिष्ट नहीं करते तब तक वैश्विक अनुभाग में वॉल्यूम स्वतः बनाए जाएंगे external: true. आपको अभी भी प्रत्येक सेवा को इसके बारे में बताना होगा volumes: अनुभाग जहां उस वॉल्यूम को माउंट करना है ।

यहाँ एक बहुत ही सरल उदाहरण है:

version: '2'volumes:  project:services:  one:    volumes:      - project:/bar  two:    volumes:      - project:/foo

वैश्विक volumes: के लिए प्रवेश project एक नामित मात्रा का कारण होगा project बनाया जाना है । यह तब के रूप में घुड़सवार हो जाता है /bar सेवा में एक, और के रूप में /foo सेवा दो में । दोनों सेवाएं वॉल्यूम के डेटा को साझा करती हैं और इसे पढ़/लिख सकती हैं ।

मुझे नहीं लगता कि आप जो करने की कोशिश कर रहे हैं वह संभव है (एक ही मात्रा में कई पथों को बदलना, और विभिन्न आर/डब्ल्यू झंडे के साथ) । अगर यह संभव है, तो शायद कुछ अन्य माध्यमों से इन गुणों के साथ नामित मात्रा बनाने का एक तरीका ढूंढकर और फिर इसे बाहरी मात्रा के रूप में जोड़कर:

volumes:  mymagicvolume:    external: true

मुझे लगता है कि आप जो करने की कोशिश कर रहे हैं वह लगभग वैसा ही है जैसा देखा गया है यहाँ. संक्षेप में: वर्तमान में एक नामित वॉल्यूम बनाना संभव नहीं है जो होस्ट पर माउंट पॉइंट को संदर्भित करता है । आप कंटेनरों के बीच डेटा साझा करने के लिए एक नामित वॉल्यूम बना सकते हैं, लेकिन डेटा केवल वॉल्यूम में ही मौजूद होगा, और जब आप वॉल्यूम हटाते हैं तो गायब हो जाते हैं ।

बढ़ते नामित वॉल्यूम प्रस्तावित किए गए हैं, लेकिन दुर्भाग्य से इसे निकट भविष्य में कोर में नहीं जोड़ा जाएगा । हालांकि, नामित डॉकर प्लगइन का उपयोग करके यह संभव है स्थानीय-जारी रहती है.

बाहर की जाँच करें संस्करण 2 उदाहरण के लिए, यह भी वॉल्यूम कॉन्फ़िगरेशन संदर्भ:

मेरा उदाहरण: (संस्करण 1)

$ tail -4 docker-compose.yml   volumes:    - ./etc/nginx/conf.d:/etc/nginx/conf.d:ro    - ./var/log/nginx:/var/log/nginx:rw    - ./var/www/html:/var/www/html:rw$