أنا أستخدم مستودع discourse_docker مع البرنامج النصي launcher لتشغيل نسخة داخلية من Discourse. أود تغيير سياسة إعادة التشغيل بشكل دائم من always إلى unless-stopped لأتمكن من إبقاء حاويات docker متوقفة عند إجراء ترقيات / إعادة تشغيل لنظام التشغيل.
يمكنني رؤية أن سياسة إعادة التشغيل هي متغير في البرنامج النصي launcher ولكن كيف يمكنني الاحتفاظ بهذا الإعداد بأفضل شكل عند بناء حاوية جديدة؟ يجب أن يعمل هذا عبر كل من “launcher rebuild” وكذلك استخدام docker_manager عبر /admin/upgrade
نعم، أعرف ذلك تحديث دوكر هو ما أقوم به حاليًا. لكنني أخشى أن أنساه في بعض عمليات إعادة البناء التالية. لذلك، لهذا السبب السؤال عن كيفية جعله دائمًا.
خيار آخر هو مجرد تعديل البرنامج النصي للمشغل والأمل في عدم وجود الكثير من تعارضات إعادة التأسيس عند السحب
الوقت الوحيد الذي واجهت فيه مشكلة مع عمليات إعادة التشغيل بعد الإقلاع هو إذا قمت بالتبديل من app.yml إلى web_only.yml ونسيت تدمير حاوية app. أقوم بترقيات وإعادة تشغيل Docker بانتظام دون أي مشاكل مع التشغيل التلقائي. للمعلومية، لم أر أي شخص آخر قلقًا بشأن هذا في السنوات الخمس الماضية. ما لم يكن لديك بعض الأشياء قيد اللعب لا أعرف عنها، ربما لا تقلق بشأنها؟
حسنًا، اليوم كانت المشكلة أنني أردت إجراء تثبيت نظيف حيث كان لدي إصدار غريب 2.4.0-betaXYZ لم يتمكن من التحديث بنفسه. أجريت اختبارًا على جهاز افتراضي آخر بتثبيت نظيف واستعادة النسخة الاحتياطية إلى 2.7.12 والذي نجح تمامًا (كما قمت بفصل حاوية البيانات إلى redis و postgres).
الآن كان الخادم الرئيسي لا يزال يعمل بنظام Ubuntu قديم و Docker قديم، لذلك أردت:
أخذ نسخة احتياطية
إيقاف Discourse
القيام بمشكلات ترقية نظام التشغيل دون القلق بشأن Discourse بما في ذلك عمليات إعادة التشغيل المتعددة
إجراء تثبيت نظيف
استعادة النسخة الاحتياطية
أردت فقط إبقاء الحاويات متوقفة وعدم حذفها على الفور، حيث لم أكن متأكدًا بعد مما إذا كنت بحاجة إلى أي شيء منها ربما نسيته أثناء اختباري. وفكرت للتو، حسنًا، “unless-stopped” هو سياسة إعادة التشغيل المثالية بالنسبة لي حيث تضمن تشغيل الحاويات تلقائيًا بعد إعادة التشغيل إلا إذا قمت بإيقافها يدويًا. عادةً ما يكون هذا هو ما أريده بالضبط، لذلك فكرت لماذا لا أحاول جعله دائمًا.
ليس الأمر مهمًا إذا لم يكن ذلك ممكنًا. سأقوم فقط بتحديث Docker (أو إذا كنت أنسى ذلك كثيرًا، فسأقوم بتحديث Docker عبر cron كل 5 دقائق).