لتغيير نقطة تثبيت الارتباط في Compose بأمان على macOS، حدد أولاً مجلد المضيف الحالي ومسار الحاوية الذي يخدمه. انسخ الملفات إلى مجلد Mac الجديد قبل تعديل ملف Compose، ثم تحقق من نقطة التثبيت التي تم تحليلها وأعد إنشاء الخدمة المتأثرة. تشير نقطة تثبيت الارتباط إلى مسار على المضيف؛ وتغيير هذا المسار لا ينقل الملفات الأصلية أو يحذفها. توضح وثائق نقاط تثبيت الارتباط الخاصة بـ Docker أيضًا أن نقطة التثبيت يمكن أن تخفي الملفات الموجودة بالفعل في وجهتها داخل الحاوية.

معرفة الملفات التي تتحكم فيها نقطة التثبيت

تربط نقطة تثبيت الارتباط في Compose مسارًا على جهاز Mac الخاص بك بمسار داخل الحاوية. على سبيل المثال، يجعل ./data:/var/lib/example الدليل data المجاور لملف Compose متاحًا داخل الحاوية عند /var/lib/example. يمكن لعمليات الكتابة التي تجريها الحاوية على نقطة التثبيت هذه تعديل ملفات Mac، نظرًا لأن نقاط تثبيت الارتباط تكون قابلة للقراءة والكتابة افتراضيًا. يمثل مجلد Mac البيانات التي تحتاج إلى الحفاظ عليها؛ بينما وجهة الحاوية هي المكان الذي يتوقع التطبيق العثور عليها فيه.

يختلف هذا عن وحدة التخزين المسماة (named volume) مثل db-data:/var/lib/example. يتم تخزين وحدة التخزين المسماة وإدارتها بواسطة Docker، بينما تستخدم نقطة تثبيت الارتباط دليلاً على المضيف. يُعد تغيير أحدهما إلى الآخر عملية ترحيل تخزين، وليس مجرد تعديل للمسار. لا تفترض أن إعادة إنشاء الحاوية ستنسخ الملفات بينهما. توضح وثائق التخزين الخاصة بـ Docker هذا الفارق.

نسخ الملفات الحالية إلى مجلد Mac الجديد

قبل تعديل ملف Compose، أوقف الخدمة إذا كان يُحتمل أن تكتب بيانات. من Terminal، قم بتشغيل docker compose stop app، مع استبدال app باسم خدمة Compose. يقلل هذا من احتمالية تباين المجلد القديم والجديد أثناء النسخ. تحقق من ملف Compose وأي ملفات تجاوز (overrides) للتأكد من المصدر والوجهة الحاليين بدقة؛ وتجنب التخمين بالاعتماد فقط على الدليل الظاهر في الحاوية.

على سبيل المثال، إذا كان المصدر الحالي هو ~/Projects/Old App/data والمصدر الجديد يجب أن يكون ~/Projects/New App/data، فأنشئ الوجهة وانسخ المحتويات باستخدام أمر rsync القياسي في macOS:

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

تعني الشرطات المائلة اللاحقة (trailing slashes) "نسخ محتويات هذا الدليل". وتحمي علامات الاقتباس المسافات الموجودة في أمثلة المسارات هذه من غلاف macOS الافتراضي، zsh. يقوم هذا الأمر بدمج الملفات في الوجهة ولا يحذف الملفات الموجودة فقط في الوجهة. افحص الوجهة قبل المتابعة. وإذا كانت البيانات مهمة، فاحتفظ بنسخة احتياطية مستقلة أيضًا؛ فالنسخ العادي ليس بديلاً عنها.

تحديث نقطة تثبيت الارتباط والحماية من الأخطاء المطبعية

يُفضل استخدام الصيغة الطويلة (long syntax) في Compose لتثبيت الأدلة عندما تريد أن يؤدي مسار المصدر المفقود إلى إيقاف بدء التشغيل بدلاً من التحول تلقائيًا ودون إشعار إلى مجلد فارغ:

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

هنا، يتم تحليل ./data نسبيًا بالنسبة للدليل الأصل لملف Compose لبيئة تشغيل Compose المحلية. قم بتغييره إلى مسار Mac النسبي أو المطلق المطلوب، ولكن احتفظ بـ target كما هو إذا كان يجب أن يستمر التطبيق في استخدام /var/lib/example. تُنشئ الصيغة القصيرة لـ Compose دليلاً على المضيف عندما يكون مصدره مفقودًا؛ بينما تتجنب الصيغة الطويلة مع create_host_path: false هذا السلوك الاحتياطي. راجع مرجع خدمة Compose.

إذا اخترت مسارًا مطلقًا يحتوي على مسافات، فضع سلسلة YAML بين علامتي اقتباس، على سبيل المثال source: "/Users/sam/Projects/New App/data". استبدل sam باسم الدليل الرئيسي الفعلي لحساب Mac الخاص بك. احتفظ بمسار المصدر في YAML كمسار حرفي؛ تنطبق قواعد وضع علامات الاقتباس في الغلاف (shell) على أوامر Terminal، وليس على قيم YAML.

التحقق من المسار المحلل، ثم إعادة إنشاء الخدمة

من الدليل الذي يحتوي على ملف Compose، افحص التكوين الذي سيستخدمه Compose:

docker compose config

تحقق من أن مصدر الارتباط لخدمة app يشير إلى المجلد الجديد وأن وجهته لا تزال /var/lib/example. إذا كنت تستخدم ملفات Compose متعددة، فتذكر أن المسارات تعتمد على أول ملف محدد؛ وتوضح وثائق مرجع واجهة سطر أوامر Compose هذا السلوك. وإذا كان المصدر المحلل غير متوقع، فتوقف وصحح الملف قبل بدء تشغيل الحاويات.

أعد إنشاء الخدمة حتى تستقبل الحاوية قيد التشغيل نقطة التثبيت المعدلة:

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

توضح وثائق Compose أن أمر up يعيد إنشاء الحاويات عند تغير التكوين، ويجعل الخيار --force-recreate ذلك صريحًا. تأكد من أن الخدمة قيد التشغيل، ثم تحقق من الملفات أو البيانات المتوقعة للتطبيق قبل إزالة المجلد القديم أو إعادة تسميته. يظل الدليل القديم على جهاز Mac الخاص بك ما لم تقم بحذفه بنفسك. احتفظ به حتى تتأكد من صحة المصدر الجديد وأن التطبيق يعمل كما هو متوقع.

إذا فشلت نقطة التثبيت على Docker Desktop for Mac

يقوم Docker Desktop بتشغيل الحاويات في جهاز افتراضي يعمل بنظام Linux (Linux VM) ويتولى إدارة الوصول إلى ملفات Mac. تتضمن الأدلة المشتركة الافتراضية الخاصة به /Users، و/Volumes، و/private، و/tmp، و/var/folders؛ وقد يتطلب أي مصدر يقع خارج المواقع المشتركة المتاحة إضافته في Docker Desktop من خلال Settings > Resources > File sharing. تصف وثائق إعدادات Docker Desktop آلية التحكم هذه وتشير إلى أن أذونات الملفات لا تزال مهمة.

يجب أن تدفعك نقطة التثبيت الفاشلة إلى التحقق من المسار والمشاركة، وليس حذف النسخة القديمة. إذا كان الدليل الجديد فارغًا، فتحقق من source المحلل، وما إذا كان النسخ قد وضع الملفات في مستوى الدليل المقصود، وما إذا كان بإمكان Docker Desktop الوصول إلى موقع Mac هذا. لا تستخدم docker compose down -v كخطوة لإصلاح نقطة تثبيت الارتباط: فهذا غير ضروري لتغيير مصدر الارتباط وقد يؤدي إلى إزالة وحدات التخزين المسماة التي يستخدمها المشروع.

خطوة الإنهاء الآمنة بسيطة: تحقق من أن مجلد Mac الجديد يحتوي على الملفات المطلوبة، وتأكد من أن Compose يحلل المسار إلى ذلك المجلد ووجهة الحاوية المتوقعة، ثم اختبر الخدمة المعاد إنشاؤها قبل التخلص من النسخة الأصلية.

المصادر