سؤال كيف أقوم تلقائيًا ببدء تشغيل حاويات عامل ميناء عند تمهيد النظام؟


ما هي الطريقة الجيدة لبدء حاويات حاويات السفن تلقائيًا عند تشغيل النظام؟

هل هناك طريقة مفضلة للقيام بذلك على Ubuntu 14.04؟

لقد استعملت supervisord في الماضي لبدء تطبيقات الويب تلقائيًا. لكن هذا لا يبدو وكأنه الشيء الصحيح لـ Docker.


100
2017-10-02 14:25


الأصل




الأجوبة:


على ما يبدو ، فإن الأسلوب الحالي لبدء الحاويات دوكر التلقائي (من دوكر 1.2) هو استخدام سياسات اعادة التشغيل. سيتحكم هذا في كيفية قيام Docker بالتعامل مع بدء الحاوية عند بدء التشغيل وإعادة تشغيل الحاوية عند خروجها. لقد استخدمت الخيار "دائمًا" حتى الآن ، ويمكن أن أؤكد أنه يجعل Docker يقوم ببدء تشغيل الحاوية تلقائيًا عند بدء تشغيل النظام:

sudo docker run --restart=always -d myimage

وثائق مقتطفات

إعادة تشغيل السياسات باستخدام علامة - قم بتشغيل - في تشغيل Docker ، يمكنك ذلك   تحديد سياسة إعادة التشغيل لكيفية أو ينبغي ألا تكون الحاوية   إعادة تشغيل عند الخروج.

لا - عدم إعادة تشغيل الحاوية عند الخروج منها.

عند الفشل - إعادة تشغيل الحاوية فقط إذا خرجت مع صفر   حالة الخروج.

دائما - قم دائما بإعادة تشغيل الحاوية بغض النظر عن حالة الخروج.

يمكنك أيضًا تحديد الحد الأقصى للمرات التي سيحاول فيها Docker   إعادة تشغيل الحاوية عند استخدام سياسة الفشل. الافتراضي هو   أن Docker سيحاول للأبد إعادة تشغيل الحاوية.

$ sudo docker run --restart=always redis

سيدير ​​هذا redis   حاوية مع سياسة إعادة تشغيل دائما بحيث إذا كانت الحاوية   مخارج ، سيقوم Docker بإعادة تشغيله.

$ sudo docker run --restart=on-failure:10 redis

هذا سيدير   حاوية redis مع سياسة إعادة التشغيل على الفشل والحد الأقصى   إعادة تشغيل عدد 10. إذا خرجت حاوية redis مع خروج غير صفري   الحالة أكثر من 10 مرات في صف سيحبط Docker محاولة إعادة التشغيل   الحاوية. توفير الحد الأقصى لإعادة التشغيل صالحة فقط ل   سياسة الفشل.


121
2017-12-07 20:18



"دائما - دائما إعادة تشغيل الحاوية بغض النظر عن حالة الخروج" مربكة بعض الشيء. لن يعيد تشغيل الحاوية إذا خرجت يدويًا أو أوقفت الحاوية ، وهو السلوك الذي كنت أبحث عنه. - w00t
رائع! شكرا جربها الان. - zx1986
ملاحظة: سياسة أخرى تسمى unless-stopped تمت أضافتة. يعمل مثل always ولكن إذا تم إيقاف الحاوية وتم إعادة تمهيد النظام أو إعادة تشغيل daemon docker ، فلن تتم إعادة تشغيل الحاوية. انظر هنا للحصول على كتابة لطيفة من جميع الخيارات الأربعة blog.codeship.com/... - David Morales
بالطبع ، docker الشيطان يجب أن يبدأ تلقائيا لدعم هذا. - sherrellbc


عامل الميناء لديه هذه الصفحة يشرح كيفية القيام بذلك مع مغرور و systemd. أوافق على أنه لا يبدو أنه الشيء الصحيح لـ Docker. حلهم هو تشغيل docker start، والتي تفترض أنك قمت بالفعل بإنشاء الحاوية الخاصة بك. كنت أعتقد أنك إما أن تفعل docker run --rm في البرنامج النصي المبتدئ (بمعالجته كعلامة تجارية جديدة وحاوية من صورة) أو فقط دع باعفان عامل الميناء يقوم بإعادة تشغيل الحاويات نفسها على الحذاء (كما يفعل افتراضيا إذا لم تفعل شيئًا آخر). تتميز ميزة Upstart بالسماح ببدء / إيقاف عمليات سهلة ، ولكنك تحصل على ذلك من خلال بدء / إيقاف برنامج docker أيضًا!

أعتقد أنه من الغريب أن يجبر المستخدم على إنشاء حاوية يدويًا (مع كل روابط المنفذ / وحدة التخزين الصحيحة) قبل عمل البرنامج النصي المبتدئ.


7
2017-10-14 04:49





لكن هذا لا يبدو وكأنه الشيء الصحيح لـ Docker.

لما لا؟

أستخدم الإشراف لهذا بنجاح كبير.

استخدم ما تعرفه ، واستخدم ما ينجح ، واستخدم شيئًا يمكنك الحفاظ عليه وفهمه بسهولة.


4
2017-10-02 14:27



شكراEEAA .. هل هذا يعني تشغيلها في وضع غير خفي؟ لا يعني ذلك أيضًا أنك بحاجة إلى تشغيلها --rm ؟ - Stefan Arentz
أركض الحاويات في وضع المقدمة ، والسماح للشرف على التقاط stdout / ستدر. لست متأكدا لماذا --rm ذو صلة هنا. - EEAA
EEAA: عن سؤالك: بالنسبة إلى بعض الأشخاص ، docker هو بديل عن lxc أو openvz التي لديها lxc.start.auto = 1 و vzctl set --onboot yes. كما تشتمل ESXi وحلول التمثيل الافتراضي الأخرى على هذه الميزة. مثل لورنس ، لا أعتقد أيضًا أن مثل هذه الميزة التلقائية يجب أن يتم تنفيذها بطريقة خاصة بالتوزيع لأن مستخدم عامل ميناء يجب أن يكون قادرًا على حل نفس المشكلة بنفس المعرفة على كل منصة. - Daniel Alder
الحق ، Docker هو وسيلة رائعة لفصل المضيف عن تشغيل الحاويات بحيث يستخدم التكوين الخاص بالمضيف قليلاً من خطوة إلى الوراء. - nijave