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


साथ में डॉकर लिखें v1.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/shareme

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


41
2018-03-02 15:16


मूल




जवाब:


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

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

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

$ docker volume ls 
DRIVER              VOLUME NAME
local               f004b95d8a3ae11e9b871074e9415e24d536742abfe86b32ffc867f7b7063e55
local               9a148e167e1c722cbdb67c8edc36f02f39caeb2d276e9316e64de36e7bc2c35d

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

$ docker volume ls
local               projectname_someconf
local               projectname_otherconf

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

docker-compose.yml वाक्यविन्यास है:

version: '2'

services:
    app:
        container_name: app
        volumes_from:
            - appconf
    appconf:
        container_name: appconf
        volumes:
            - ./Docker/AppConf:/var/www/conf

volumes:
    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"
    }
]

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

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


40
2018-04-09 14:20



बहुत अच्छा जवाब। खुश होती है। नए डॉकर-कंपोज़ वॉल्यूम्स को खोजने के लिए बहुत कुछ वापस आ गया। - Derek Adair
आपको ये कहां मिला? डॉकर डॉक्स की तुलना में बहुत अधिक लगता है? - Derek Adair
@DerekAdair धन्यवाद, लेकिन जैसा कि आप ऊपरी बाईं ओर वाले आंकड़ों में पढ़ सकते हैं, इस विषय पर Google उत्तर इंजन परिणाम पृष्ठों में यह उत्तर अच्छी तरह से संदर्भित है। - kaiser
के बजाय $(docker volume ls |awk '{print $2}') आप उपयोग कर सकते हैं $(docker volume ls -q) न केवल यह आसान है, यह पहली पंक्ति पर "वॉल्यूम" प्रिंट नहीं करता है। - Arthur Tacca
यह सही नहीं है; यह ऐसा नहीं करता है जो ऐसा लगता है जैसे ऐसा करता है। volumes_from है वारिस किसी अन्य कंटेनर से वॉल्यूम्स की सूची। नामित वॉल्यूम का उपयोग करने के लिए, आप सेवा-स्तर वाक्यविन्यास का उपयोग करते हैं - NAME:DEST, और शीर्ष स्तर में पथ सेट करें volumes कुंजी। यह उदाहरण क्या करता है (इसे लिखने के समय) एक मानक मात्रा बना देता है इसके अलावा नामित वॉल्यूम के लिए, और नामित वॉल्यूम का उपयोग नहीं किया जाता है। - trevorj


जिस तरह से मैं इसे समझता हूं, आप वैश्विक का उपयोग कर सकते हैं 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

13
2018-04-02 21:56



पहले से ही ऊपर उठाया गया है, लेकिन आज बस इसके आसपास पाने के लिए समय मिला और एक विस्तारित डेटा जोड़ा। आपकी सभी मदद का धन्यवाद! प्रश्न: जैसा कि आप वॉल्यूम का नाम देते हैं project और उसके बाद इसे संदर्भित करें project:/bar, कहाँ है project पथ वास्तव में परिभाषित किया? - kaiser
डॉकर-कंपोज़ स्वचालित रूप से नामित वॉल्यूम्स के रूप में उन्हें / var / lib / docker / वॉल्यूम / वॉल्यूमनाम के रूप में बना देगा - JamesCW
क्षमा करें, अभी भी समझ में नहीं आता है कि डॉकर के लिए पथ कहाँ है project: उर्फ? डॉकर कैसे जानता है कि मैं साझा करना चाहता हूं, कहो ./some_folder/some_subfolder/yet_another_subfolder को one: तथा two: कंटेनर? - Alexander Lomia
उस स्थिति में यह "प्रोजेक्ट: <whateverpath>" शीर्ष-स्तरीय वॉल्यूम के तहत है: अनुभाग - Balint Bako


चेक आउट संस्करण 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
$ 

5
2018-03-02 21:48



यह वही है जो मैंने प्रश्न में जोड़ा था और इसलिए मेरे प्रश्न का उत्तर नहीं देता है। क्या आप मेजबान से अलग-अलग निर्देशिकाओं को नामांकित वॉल्यूम के रूप में एकाधिक सेवाओं में मैप करने के तरीके का एक उदाहरण पोस्ट करना चाहते हैं? - kaiser
मेरा संपर्क है अलग, यह इंगित करता है Version 2 दस्तावेज़ का खंड) - alexus
मेरी गलती। मैं बस उस लिंक को भी भूल गया था। जब आप प्रश्न में वाईएमएल सामान देखते हैं, तो आप देख सकते हैं कि मैंने अलग-अलग शीर्ष स्तर का उपयोग करने के लिए स्पष्ट रूप से प्रयास करने की कोशिश की volumesकुंजी - जो मैंने नहीं किया, इसलिए सवाल है। मुझे जो नहीं मिला वह क्या है docker-compose.yml संस्करण 1 वाक्यविन्यास के साथ भाग मुझे समझाने के लिए है। - kaiser


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

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


5
2018-06-15 12:20



बढ़ते वॉल्यूम नाम  अब एक बात है ... 1.11 या 1.12 के बाद से। - kaiser
ऐसा प्रतीत होता है, हाँ। धन्यवाद! - Sander