التكوين المستمر لسياسة إعادة التشغيل

مرحباً،

أنا أستخدم مستودع discourse_docker مع البرنامج النصي launcher لتشغيل نسخة داخلية من Discourse. أود تغيير سياسة إعادة التشغيل بشكل دائم من always إلى unless-stopped لأتمكن من إبقاء حاويات docker متوقفة عند إجراء ترقيات / إعادة تشغيل لنظام التشغيل.

يمكنني رؤية أن سياسة إعادة التشغيل هي متغير في البرنامج النصي launcher ولكن كيف يمكنني الاحتفاظ بهذا الإعداد بأفضل شكل عند بناء حاوية جديدة؟ يجب أن يعمل هذا عبر كل من “launcher rebuild” وكذلك استخدام docker_manager عبر /admin/upgrade

شكراً مقدماً،
تحياتي
.sascha

إعجاب واحد (1)

لا أتذكر أن أحداً آخر سأل هذا من قبل، ولا أرى طريقة واضحة. أعتقد أن أفضل رهان لك هو القيام بـ

  ./launcher destroy app

إذا كنت تريد أن يبقى متوقفاً وتشغيله مرة أخرى باستخدام

  ./launcher start app

سيؤدي هذا إلى تدمير الحاوية، لذا سيتم تدمير أي تغييرات أجريتها بداخلها (مثل الترقيات من docker_manager).

أوه، ولكن إليك هذا:

باختصار: قم بتشغيل docker update --restart=unless-stopped app بعد كل إعادة بناء.

إعجابَين (2)

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

الوقت الوحيد الذي واجهت فيه مشكلة مع عمليات إعادة التشغيل بعد الإقلاع هو إذا قمت بالتبديل من app.yml إلى web_only.yml ونسيت تدمير حاوية app. أقوم بترقيات وإعادة تشغيل Docker بانتظام دون أي مشاكل مع التشغيل التلقائي. للمعلومية، لم أر أي شخص آخر قلقًا بشأن هذا في السنوات الخمس الماضية. ما لم يكن لديك بعض الأشياء قيد اللعب لا أعرف عنها، ربما لا تقلق بشأنها؟

حسنًا، اليوم كانت المشكلة أنني أردت إجراء تثبيت نظيف حيث كان لدي إصدار غريب 2.4.0-betaXYZ لم يتمكن من التحديث بنفسه. أجريت اختبارًا على جهاز افتراضي آخر بتثبيت نظيف واستعادة النسخة الاحتياطية إلى 2.7.12 والذي نجح تمامًا (كما قمت بفصل حاوية البيانات إلى redis و postgres).

الآن كان الخادم الرئيسي لا يزال يعمل بنظام Ubuntu قديم و Docker قديم، لذلك أردت:

  1. أخذ نسخة احتياطية
  2. إيقاف Discourse
  3. القيام بمشكلات ترقية نظام التشغيل دون القلق بشأن Discourse بما في ذلك عمليات إعادة التشغيل المتعددة
  4. إجراء تثبيت نظيف
  5. استعادة النسخة الاحتياطية

أردت فقط إبقاء الحاويات متوقفة وعدم حذفها على الفور، حيث لم أكن متأكدًا بعد مما إذا كنت بحاجة إلى أي شيء منها ربما نسيته أثناء اختباري. وفكرت للتو، حسنًا، “unless-stopped” هو سياسة إعادة التشغيل المثالية بالنسبة لي حيث تضمن تشغيل الحاويات تلقائيًا بعد إعادة التشغيل إلا إذا قمت بإيقافها يدويًا. عادةً ما يكون هذا هو ما أريده بالضبط، لذلك فكرت لماذا لا أحاول جعله دائمًا.

ليس الأمر مهمًا إذا لم يكن ذلك ممكنًا. :slight_smile: سأقوم فقط بتحديث Docker (أو إذا كنت أنسى ذلك كثيرًا، فسأقوم بتحديث Docker عبر cron كل 5 دقائق).