كيف يتم عامل الميناء يؤلف الإصدار 2" مجلدات " بناء الجملة من المفترض أن ننظر?

مع عامل الميناء يؤلف الإصدار 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- فرع مرجع تكوين وحدة التخزين، و عامل الميناء يؤلف مستندات حجم / حجم-مرجع السائق وبدا من خلال أمثلة جيثب للعثور على بناء الجملة الصحيح المتوقع. يبدو أن لا أحد يستخدم بالفعل ذلك (جيثب) والوثائق بعيدة كل البعد عن الاكتمال (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"    }]

سيدينوت: قد ترغب في docker-compose down الخدمات الخاصة بك للحصول على بداية جديدة قبل الذهاب إلى إنشاء وحدات التخزين.

في حال كنت تستخدم بوت2دوكر/ آلة عامل الميناء، سيكون لديك ل 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$