macOS-এ নিরাপদে একটি Compose বাইন্ড মাউন্ট পরিবর্তন করতে, প্রথমে বিদ্যমান হোস্ট ফোল্ডার এবং এটি যে কন্টেইনার পাথে কাজ করে তা শনাক্ত করুন। Compose সম্পাদনা করার আগে ফাইলগুলি নতুন Mac ফোল্ডারে কপি করুন, তারপর সমাধান করা (resolved) মাউন্টটি যাচাই করুন এবং প্রভাবিত সার্ভিসটি পুনরায় তৈরি করুন। একটি বাইন্ড মাউন্ট একটি হোস্ট পাথ নির্দেশ করে; সেই পাথ পরিবর্তন করলে মূল ফাইলগুলি সরে যায় না বা মুছে যায় না। ডকারের বাইন্ড মাউন্ট ডকুমেন্টেশনে আরও ব্যাখ্যা করা হয়েছে যে একটি মাউন্ট তার কন্টেইনার গন্তব্যে ইতিমধ্যে উপস্থিত থাকা ফাইলগুলি লুকিয়ে রাখতে পারে।

মাউন্টটি কোন ফাইলগুলি নিয়ন্ত্রণ করে তা জানুন

একটি Compose বাইন্ড মাউন্ট আপনার Mac-এর একটি পাথের সাথে একটি কন্টেইনারের ভেতরের একটি পাথকে সংযুক্ত করে। উদাহরণস্বরূপ, ./data:/var/lib/example Compose ফাইলের পাশে থাকা data ডিরেক্টরিটিকে কন্টেইনারের ভেতরে /var/lib/example-এ ব্যবহারযোগ্য করে তোলে। কন্টেইনারের মাধ্যমে সেই মাউন্টে করা রাইট (write) অপারেশনগুলি Mac-এর ফাইল পরিবর্তন করতে পারে, কারণ বাইন্ড মাউন্টগুলি ডিফল্টভাবে রিড-রাইট সুবিধাযুক্ত। Mac ফোল্ডারটি হলো সেই ডেটা যা আপনাকে সংরক্ষণ করতে হবে; কন্টেইনারের গন্তব্য হলো যেখানে অ্যাপ্লিকেশনটি এটি দেখতে প্রত্যাশা করে।

এটি db-data:/var/lib/example-এর মতো কোনো নামযুক্ত ভলিউম (named volume) থেকে আলাদা। একটি নামযুক্ত ভলিউম ডকার দ্বারা সংরক্ষিত ও পরিচালিত হয়, যেখানে একটি বাইন্ড মাউন্ট একটি হোস্ট ডিরেক্টরি ব্যবহার করে। একটি থেকে অন্যটিতে পরিবর্তন করা কেবল একটি পাথ সম্পাদনা নয়, বরং একটি স্টোরেজ মাইগ্রেশন। ধরে নেবেন না যে একটি কন্টেইনার পুনরায় তৈরি করলেই তাদের মধ্যে ফাইল কপি হয়ে যাবে। ডকারের স্টোরেজ ডকুমেন্টেশনে এই পার্থক্যের বর্ণনা রয়েছে।

বিদ্যমান ফাইলগুলি নতুন Mac ফোল্ডারে কপি করুন

Compose ফাইল পরিবর্তন করার আগে, সার্ভিসটি যদি ডেটাতে রাইট করতে পারে তবে সেটি বন্ধ করুন। টার্মিনাল থেকে docker compose stop app চালান, যেখানে app-এর জায়গায় আপনার Compose সার্ভিসের নাম দিন। এটি আপনার কপি করার সময় পুরানো এবং নতুন ফোল্ডারের মধ্যে অমিল হওয়ার সম্ভাবনা হ্রাস করে। বর্তমান সঠিক উৎস এবং গন্তব্য নিশ্চিত করতে Compose ফাইল এবং যেকোনো ওভাররাইড পরীক্ষা করুন; শুধুমাত্র একটি কন্টেইনারের দৃশ্যমান ডিরেক্টরি দেখে অনুমান করা এড়িয়ে চলুন।

উদাহরণস্বরূপ, বর্তমান উৎস যদি ~/Projects/Old App/data হয় এবং নতুন উৎস যদি ~/Projects/New App/data হওয়া প্রয়োজন হয়, তবে গন্তব্য তৈরি করুন এবং macOS-এর স্ট্যান্ডার্ড rsync কমান্ড দিয়ে বিষয়বস্তু কপি করুন:

mkdir -p "$HOME/Projects/New App/data"
rsync -a "$HOME/Projects/Old App/data/" "$HOME/Projects/New App/data/"

শেষের স্ল্যাশগুলির অর্থ হলো "এই ডিরেক্টরির ভেতরের বিষয়বস্তু কপি করুন।" উদ্ধৃতিচিহ্নগুলি (quotes) এই উদাহরণ পাথগুলির স্পেসগুলোকে ডিফল্ট macOS শেল, zsh থেকে সুরক্ষিত রাখে। এই কমান্ডটি ফাইলগুলিকে গন্তব্যে মার্জ করে এবং শুধুমাত্র গন্তব্যে থাকা ফাইলগুলিকে মুছে ফেলে না। এগিয়ে যাওয়ার আগে গন্তব্যটি পরীক্ষা করে নিন। ডেটা গুরুত্বপূর্ণ হলে, একটি স্বাধীন ব্যাকআপও রাখুন; কোনো কপি ব্যাকআপের বিকল্প নয়।

বাইন্ড মাউন্ট আপডেট করুন এবং টাইপো থেকে সতর্ক থাকুন

ডিরেক্টরি মাউন্টের জন্য Compose লং সিনট্যাক্স (long syntax) পছন্দ করুন যখন আপনি চান যে একটি অনুপস্থিত সোর্স পাথের কারণে নিরবচ্ছিন্নভাবে একটি খালি ফোল্ডার তৈরি না হয়ে স্টার্টআপ বন্ধ হোক:

services:
  app:
    volumes:
      - type: bind
        source: ./data
        target: /var/lib/example
        bind:
          create_host_path: false

এখানে, একটি লোকাল Compose রানটাইমের জন্য ./data পাথটি Compose ফাইলের প্যারেন্ট ডিরেক্টরির সাপেক্ষে সমাধান করা হয়। এটিকে উদ্দিষ্ট আপেক্ষিক (relative) বা পরম (absolute) Mac পাথে পরিবর্তন করুন, তবে অ্যাপ্লিকেশনটি যদি /var/lib/example ব্যবহার চালিয়ে যেতে চায় তবে target অপরিবর্তিত রাখুন। Compose-এর শর্ট সিনট্যাক্স উৎস অনুপস্থিত থাকলে একটি হোস্ট ডিরেক্টরি তৈরি করে; create_host_path: false সহ লং সিনট্যাক্স এই ফলব্যাক এড়িয়ে চলে। দেখুন Compose সার্ভিস রেফারেন্স।

আপনি যদি স্পেসযুক্ত কোনো অ্যাবসোলিউট পাথ বেছে নেন, তবে YAML স্ট্রিংটি উদ্ধৃতিচিহ্নে রাখুন, উদাহরণস্বরূপ source: "/Users/sam/Projects/New App/data"। sam-কে আপনার Mac অ্যাকাউন্টের আসল হোম-ডিরেক্টরির নাম দিয়ে প্রতিস্থাপন করুন। YAML-এ সোর্স পাথটিকে লিটারেল পাথ হিসেবে রাখুন; শেল উদ্ধৃতির নিয়ম টার্মিনাল কমান্ডের জন্য প্রযোজ্য, YAML মানের ক্ষেত্রে নয়।

সমাধান করা পাথ পরীক্ষা করুন, তারপর সার্ভিসটি পুনরায় তৈরি করুন

Compose ফাইলটি ধারণকারী ডিরেক্টরি থেকে, Compose যে কনফিগারেশনটি ব্যবহার করবে তা পরীক্ষা করুন:

docker compose config

পরীক্ষা করে দেখুন যে app সার্ভিসের বাইন্ড সোর্সটি নতুন ফোল্ডারে নির্দেশ করছে কি না এবং এর টার্গেট এখনও /var/lib/example আছে কি না। আপনি যদি একাধিক Compose ফাইল ব্যবহার করেন, মনে রাখবেন যে পাথগুলি প্রথম নির্দিষ্ট ফাইলের ওপর ভিত্তি করে নির্ধারিত হয়; Compose CLI রেফারেন্স-এ এই আচরণটি নথিভুক্ত আছে। সমাধান করা সোর্সটি অপ্রত্যাশিত হলে, কন্টেইনার চালু করার আগে থামুন এবং ফাইলটি সংশোধন করুন।

সার্ভিসটি পুনরায় তৈরি করুন যাতে চলমান কন্টেইনার পরিবর্তিত মাউন্টটি গ্রহণ করে:

docker compose up -d --force-recreate app
docker compose ps app

Compose-এর নথিতে উল্লেখ রয়েছে যে কনফিগারেশন পরিবর্তিত হলে up কন্টেইনারগুলিকে পুনরায় তৈরি করে, এবং --force-recreate এটিকে নিশ্চিত করে। সার্ভিসটি চালু আছে কিনা নিশ্চিত করুন, তারপর পুরানো ফোল্ডারটি অপসারণ বা নাম পরিবর্তন করার আগে অ্যাপ্লিকেশনের প্রত্যাশিত ফাইল বা ডেটা পরীক্ষা করুন। পুরানো ডিরেক্টরিটি আপনি নিজে মুছে না ফেলা পর্যন্ত আপনার Mac-এ থাকবে। নতুন উৎসটি সঠিক এবং অ্যাপ্লিকেশনটি প্রত্যাশা অনুযায়ী কাজ করছে তা নিশ্চিত না হওয়া পর্যন্ত এটি রেখে দিন।

Mac-এর জন্য Docker Desktop-এ মাউন্ট ব্যর্থ হলে

Docker Desktop একটি Linux VM-এ কন্টেইনারগুলি চালায় এবং Mac ফাইলগুলিতে অ্যাক্সেস সমন্বয় করে। এর ডিফল্ট শেয়ার করা ডিরেক্টরিগুলির মধ্যে রয়েছে /Users, /Volumes, /private, /tmp, এবং /var/folders; উপলব্ধ শেয়ার করা অবস্থানের বাইরের কোনো উৎসকে Docker Desktop-এর Settings > Resources > File sharing-এ যোগ করার প্রয়োজন হতে পারে। ডকারের Desktop সেটিংস ডকুমেন্টেশনে এই নিয়ন্ত্রণের বর্ণনা রয়েছে এবং উল্লেখ করা হয়েছে যে ফাইল পারমিশন এখনও গুরুত্বপূর্ণ।

একটি ব্যর্থ মাউন্টের ক্ষেত্রে পাথ এবং শেয়ারিং যাচাই করা উচিত, পুরানো কপিটি মুছে ফেলা নয়। যদি নতুন ডিরেক্টরিটি খালি থাকে, তবে সমাধান করা source, কপি করার ফলে ফাইলগুলি উদ্দিষ্ট ডিরেক্টরি স্তরে সঠিকভাবে স্থানান্তরিত হয়েছে কি না, এবং Docker Desktop সেই Mac অবস্থানে অ্যাক্সেস করতে পারছে কি না তা যাচাই করুন। বাইন্ড-মাউন্ট মেরামতের পদক্ষেপ হিসেবে docker compose down -v ব্যবহার করবেন না: একটি বাইন্ড সোর্স পরিবর্তন করার জন্য এটি অপ্রয়োজনীয় এবং এটি প্রকল্পের ব্যবহৃত নামযুক্ত ভলিউমগুলিকে সরিয়ে ফেলতে পারে।

নিরাপদ সমাপ্তিটি সহজ: যাচাই করুন যে নতুন Mac ফোল্ডারে প্রয়োজনীয় ফাইল রয়েছে, নিশ্চিত করুন যে Compose সেই ফোল্ডার এবং প্রত্যাশিত কন্টেইনার টার্গেট সমাধান করছে, তারপর মূল কপিটি অপসারণের আগে পুনরায় তৈরি করা সার্ভিসটি পরীক্ষা করুন।

সূত্র