ডকার রচনা - একাধিক ধারকগুলির মধ্যে নামযুক্ত ভলিউম ভাগ করুন


116

আমি ডকার-রচনা এবং v3 ব্যবহার করছি। আমি ডকারে একটি ভলিউম মাউন্ট করার চেষ্টা করছি:

./appdata:/appdata

আমি এটি একটি ভলিউম হিসাবে পেতে চাই এবং তারপরে একাধিক পাত্রে volume ভলিউমটি উল্লেখ করি ভলিউম কনফিগারেশন রেফারেন্স শুধুমাত্র শো data-volume:একটি নামাঙ্কিত ভলিউম হিসাবে, কোন মান, তাই এটি উপরে মত দেখাচ্ছে না।

services:

    nginx:
        build: ./nginx/
        ports:
            - 80:80
        links:
            - php
        volumes:
            - app-volume

    php:
        build: ./php/
        expose:
            - 9000
        volumes:
            - app-volume

volumes:
     app-volume: ./appdata:/appdata

এটি আমাকে দেয়:

ত্রুটি: ফাইল './docker-compose.yml' এ, ভলিউম 'অ্যাপ্লিকেশন-ভলিউম' অবশ্যই স্ট্রিং নয় ম্যাপিং।

স্পষ্টতই আমি জানি আমি volumesকী / মান জোড় পরিবর্তন করতে হবে তবে আমি কীভাবে এটি পরিবর্তন করব তা নিশ্চিত নই যাতে আমি পরিষেবাগুলির মধ্যে একটি ভলিউম ভাগ করতে পারি।

আমিও পরীক্ষা করে দেখেছি volumes_fromতবে এটি কার্যকরভাবে অন্যান্য ধারকগুলির উত্তরাধিকারের অনুমতি দেয়। আমি volumes_fromঅন্য কন্টেইনারটিতে এমন কাউকে ব্যবহার করতে দেখেছি যার মধ্যে তারা যে ম্যাপিং চায় সেগুলি ধারণ করে তবে command: trueসেট দিয়ে যাতে কনটেইনারটি আসলে কখনও চালিত হয় না, যা আমার কাছে কেবল হ্যাকের মতো মনে হয়।

কিভাবে আমি এটি করতে পারব?


নোট, আমি কি নিম্নলিখিত পরিশ্রমী আছে:

nginx:
    volumes:
        - ./appdata:/appdata
php:
    volumes:
        - ./appdata:/appdata

তবে এটি কেবল অনুলিপি এবং এমন কিছু যা আমি প্রত্যাশা করি একটি নামযুক্ত ভলিউম আমাকে এড়াতে সহায়তা করতে পারে :-)


আপনি এই উত্তরে উত্তরটি খুঁজে পেতে পারেন: stackoverflow.com/a/49920624
Isen Ng

উত্তর:


154

নামকৃত খণ্ডগুলি নিম্নলিখিত পাত্রে পাত্রে ভাগ করা যায়:

services:
    nginx:
        build: ./nginx/
        ports:
            - 80:80
        links:
            - php
        volumes:
            - app-volume:location_in_the_container

    php:
        build: ./php/
        expose:
            - 9000
        volumes:
            - app-volume:location_in_the_container

volumes:
     app-volume: 

আমি এখানে আরও ভাল বোঝার জন্য একটি কনফিগারেশন ব্যবহার করছি। আমি আমার webধারক থেকে উত্পন্ন স্থিতিশীল ফাইলগুলি নামক ভলিউমে প্রকাশ করছি static-contentযা পরে nginxপাত্রে পড়ে এবং পরিবেশন করা হয় :

services:
  nginx:
    container_name: nginx
    build: ./nginx/

    volumes:
      - static-content:/usr/src/app

  web:
    container_name: web
    env_file: .env
    volumes:
      - static-content:/usr/src/app/public
    environment:
      - NODE_ENV=production

    command: npm run package

volumes:
  static-content:

81
আপনি static_contentহোস্ট ফাইল সিস্টেমে অবস্থানটি কোথায় সেট করেন ?
ট্র্যাভিস ভালুক

10
হোয়াইটস্পেস ইন app-volume: location_in_the_containerভুল।
hasufell

6
কি হবে যদি /usr/src/appnginxধারক এবং /usr/src/app/publicwebধারক উভয় মূল বিষয়বস্তু রয়েছে, যা এক ব্যবহার করা হবে এবং কেন আছে?
jallen0927

4
@ ট্র্যাভিসবিয়ার এই ব্যবহারের ক্ষেত্রে (ধারকগুলির মধ্যে ডেটা ভাগ করে নেওয়ার জন্য) হোস্টে রাখার আসলে দরকার নেই। স্ট্যাটিক ডেটা সহ উদাহরণ দুর্দান্ত - আপনি collectstaticএকটি
দ্য গডফাদার

8
@ কান্নাজ ট্র্যাভিসবারের প্রশ্নটি হ'ল আমি সবচেয়ে বিভ্রান্তিকর বিষয়টিকে সঠিকভাবে চিহ্নিত করে। রচনা ফাইলটিতে আপনি কীভাবে নির্দিষ্ট করতে পারবেন যেখানে নামকরণকৃত ভলিউম উত্স হয়? হোস্টে নামকরণকৃত ভলিউমটি কোথায় সংরক্ষণ করতে হবে তা নির্ধারণ করতে আমি এটি ডকার ইঞ্জিনের উপরে ছেড়ে যেতে চাই না, আমি একটি পথ নির্দিষ্ট করতে চাই।
বেন কলিন্স

35

এটি নামযুক্ত ভলিউম ব্যবহার না করেই এটি সমাধান করে:

      volumes:
          - ./appdata:/appdata

সুতরাং, দেখে মনে হচ্ছে:

services:

  nginx:
      build: ./nginx/
      ports:
          - 80:80
      links:
          - php
      volumes:
          - ./appdata:/appdata

  php:
      build: ./php/
      expose:
          - 9000
      volumes:
          - ./appdata:/appdata

4
আহ, সুন্দর সময়! আমি এটি উপরে করেছি (আমার পরিবর্তন দেখুন)। তবে, মনে হচ্ছে আমরা এখনও ম্যাপিংটিকে নকল করছি। আমি যদি এটি 3 টিরও বেশি ধারক ব্যবহার করি তবে এটি বড় হয়। এই অনুলিপিটি এড়াতে আমরা কি নামক পাত্রে ব্যবহার করতে পারি?
জিম্বো

জিনিসটি হ'ল নামযুক্ত ভলিউম কেবল সিনট্যাক্স এবং পরিষ্কার কোড সম্পর্কে কিছু নয়। এটি ডকার ডাটা ইনস্টলেশন ডিরেক্টরিতে একটি ভলিউম তৈরি করবে এবং সেখানে আপনার স্থানীয় ফাইল থাকবে না (./appdata)। এটা কি আপনার পক্ষে উপকারী?
রবার্ট

4
আমার অবশ্যই এটি দরকার ./appdata, আমি এটি করার চেষ্টা করছি। যদিও এই উত্তরটি এখানে রেখে দিন :) +1
জিম্বো

4
যদি আমার কাছে একই চিত্রের দুটি ধারক থাকে, একটি পাত্রে ফাইল আপলোড (ফাইল আপলোড ফাইলের মাধ্যমে) থাকে তবে এটি অন্যটিতে পাওয়া যাবে? যদি না হয়, আমি কিভাবে এটি করতে পারি?
ম্যাগনোজ

5

সংস্করণ ডকার-রচনা 3 থেকে শুরু করে ডক নামক ভলিউম সরানো হয়েছে।

তবে, ভলিউম উত্সের সদৃশতা এড়াতে এবং ভবিষ্যতের টাইপস থেকে নিজেকে প্রতিরোধ করতে আপনি এক্সটেনশন-ক্ষেত্রগুলি ব্যবহার করতে পারেন :

version: '3.5'

x-services-volume:
  &services-volume
  type: bind
  source: ./appdata
  target: /appdata

services:

    nginx:
        build: ./nginx/
        ports:
            - 80:80
        links:
            - php
        volumes: *services-volume

    php:
        build: ./php/
        expose:
            - 9000
        # Use same way as for nginx if target override not needed.
        volumes:
            - <<: *services-volume
            target: /opt/target-override

দ্রষ্টব্য: সংস্করণ 3.4 ফাইল ফর্ম্যাট থেকে শুরু করে সেই বৈশিষ্ট্যটি উপলব্ধ।


যদি * পরিষেবাদি-ভলিউম উপরের মান সেট করার জন্য কেবলমাত্র একটি পয়েন্টার হয় তবে এটি দুর্দান্ত লাগে ... আমাকে এটি চেষ্টা করতে হবে।
জিম্বো

@ জিম্বো হ্যাঁ, এটিও মনে রাখবেন যে ডকার-রচনা ফাইলের সংস্করণটি 3.4+ হবে
অ্যান্ড্রি ইভানিয়েকো

4
নামযুক্ত ভলিউম, ওরফে শীর্ষ-স্তরের volumesক্ষেত্র, এখনও v3 এরdocker-compose মধ্যে একটি জিনিস বলে মনে হচ্ছে ।
অ্যালেক্স পোভেল

আমি তিনটি ধারক এবং একটি হোস্টের মধ্যে ডেটা ভাগ করার জন্য ঠিক এই পদ্ধতির চেষ্টা করেছি। আমার ক্ষেত্রে, পাত্রে ফোল্ডারগুলির কাঠামো সমান। দেখে মনে হচ্ছে এটি প্রত্যাশার মতো কাজ করে। আমি যা পাই না তা হ'ল, আবার শুরু করার সময় কোন পাত্রে (বা হোস্ট) অধিকার পেয়েছে? আমি যা বলতে চাইছি: ডকার-কমপস ডাউন করার সময়, প্রতিটি ধারকের অভ্যন্তরীণ ফাইল-সিস্টেম অভ্যন্তরীণভাবে কোথাও সংরক্ষণ করা হয়। যখন আমি এখন হোস্ট-ফোল্ডারে ডেটা পরিবর্তন করি এবং আবার একটি ডকার-রচনা করি: ভাগ করা ফোল্ডারে থাকা সামগ্রীর নিয়ম কী? হোস্টের ডেটা কি অভ্যন্তরীণভাবে সংরক্ষিত ডেটা ওভাররাইট করবে?
and0r

4
@ and0r ফোল্ডারটি ভাগ করা হয়েছে, গুগল ড্রাইভ এবং প্রকৃত ব্যবহারকারীদের + ভাগ করা ফোল্ডারটি কল্পনা করুন, যদি কেউ সেই ফোল্ডারে বাকী ব্যবহারকারীর চেয়ে বেশি ফাইল মুছে
ফেলেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.