שאלה כיצד ניתן להפעיל באופן אוטומטי מכולות מעגן באתחול המערכת?


מהי דרך טובה להתחיל באופן אוטומטי מכולות מעגן כאשר המערכת אתחול למעלה?

האם יש דרך מועדפת לעשות זאת ב- Ubuntu 14.04?

אני השתמשתי supervisord בעבר אוטומטי להפעיל יישומי אינטרנט. אבל זה לא מרגיש כמו הדבר הנכון עבור Docker.


100
2017-10-02 14:25






תשובות:


ככל הנראה, את השיטה הנוכחית אוטומטית להתחיל מכולות דוקר (מ Docker 1.2) היא להשתמש מדיניות הפעלה מחדש. זה ישלוט איך Docker צריך להתמודד עם תחילת המיכל בעת ההפעלה מחדש של המכולה כאשר הוא יוצא. השתמשתי את האפשרות 'תמיד' עד כה, והוא יכול לאשר כי זה עושה את Docker להתחיל אוטומטית את המיכל בעת אתחול המערכת:

sudo docker run --restart=always -d myimage

תיעוד קטע

מדיניות הפעלה מחדש באמצעות דגל - Restart ב - Docker אתה יכול   ציין מדיניות הפעלה מחדש לגבי האופן שבו מיכל צריך או לא צריך להיות   הפעל מחדש ביציאה.

לא - אל תפעיל מחדש את המכל כאשר הוא יוצא.

on-failure - הפעל מחדש את המיכל רק אם הוא יוצא עם איפוס   מצב יציאה.

תמיד - תמיד הפעל מחדש את המיכל ללא קשר למצב היציאה.

אתה יכול גם לציין את הסכום המקסימלי של פעמים Docker ינסה   הפעל מחדש את המכל בעת שימוש במדיניות הכשל. ברירת המחדל היא   כי Docker ינסה לנצח כדי להפעיל מחדש את המיכל.

$ sudo docker run --restart=always redis

פעולה זו תפעיל את redis   מכולה עם מדיניות הפעלה מחדש של תמיד כך שאם המכולה   Exits, Docker יפעיל אותו מחדש.

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

זה יפעל   redis מיכל עם מדיניות הפעלה מחדש של on-failure ו מקסימום   ספירת הפעלה מחדש של 10. אם מיכל Redis יוצא עם יציאה לא אפס   סטטוס יותר מ 10 פעמים ברציפות מעגן יבטל מנסה להפעיל מחדש   את מיכל. הגדרת הגבלת הפעלה מקסימלית תקפה רק עבור   על מדיניות כשל.


121
2017-12-07 20:18



"תמיד - תמיד הפעל מחדש את המיכל ללא קשר למצב היציאה" הוא קצת מבלבל. זה לא יפעיל מחדש את המיכל אם אתה באופן ידני לצאת / לעצור את המכולה, המהווה את ההתנהגות שחיפשתי. - w00t
מדהים! תודה, נסה את זה עכשיו. - zx1986
הערה: התקשרה מדיניות אחרת unless-stopped הוסף. זה מתנהג כמו always אבל אם המכל הוא עצר את המערכת מחדש או הדמון docker מחדש, המיכל לא יופעל מחדש. ראה כאן נחמד לכתוב את כל 4 אפשרויות blog.codeship.com/... - David Morales
כמובן, docker daemon חייב אוטומטי להתחיל לתמוך בזה. - sherrellbc


דוקר הדף הזה זה מסביר איך לעשות את זה עם upstart ו systemd. אני מסכים שזה לא נראה כמו הדבר הנכון עבור Docker. הפתרון שלהם הוא לרוץ docker start, שמניחה שכבר יצרת את הגורם המכיל שלך. אני חושב שגם אתה היית עושה docker run --rm ב script upstart (טיפול זה כמו תהליך חדש מכולה מתמונה) או פשוט לתת את הדמון docker מחדש את המכולות עצמה על האתחול (כפי שזה יהיה כברירת מחדל אם אתה עושה שום דבר אחר). Upstart יש את היתרון של המאפשר קל להתחיל / להפסיק תהליכים, אבל אתה מקבל את זה עם התחנה של התחנה / לעצור מדי!

אני חושב שזה מוזר לכפות את המשתמש באופן ידני ליצור מיכל (עם כל הנמל הנכון / נפח bindings) לפני סקריפט upstart יעבוד.


7
2017-10-14 04:49





אבל זה לא מרגיש כמו הדבר הנכון עבור Docker.

למה לא?

אני משתמש המפקח על זה עם הצלחה גדולה.

השתמש במה שאתה יודע, להשתמש במה עובד, להשתמש במשהו שאתה יכול בקלות לשמור ולהבין.


4
2017-10-02 14:27



תודה @EEAA .. האם זה אומר שאתה מפעיל אותם במצב הלא daemon? זה גם לא אומר שאתה צריך להפעיל אותם עם --rm ? - Stefan Arentz
אני מפעיל את המכולות במצב הקדמי ולתת supervisord לתפוס stdout / stderr. אני לא בטוח למה --rm רלוונטי כאן. - EEAA
@EA: על השאלה שלך: עבור אנשים מסוימים, docker הוא תחליף lxc או openvz שיש לו lxc.start.auto = 1 ו vzctl set --onboot yes. כמו כן ESXi ופתרונות וירטואליזציה אחרים כוללים תכונה כזו. כמו לורנס, אני גם לא חושב שתכונה autostart כזו צריכה להיות מיושמת בדרך ייחודית להפצה כי משתמש מעגן צריך להיות מסוגל לפתור את אותה בעיה עם אותו ידע על כל פלטפורמה. - Daniel Alder
נכון, Docker היא דרך מצוינת לפרק את המארח מניהול מכולות כך באמצעות תצורה ספציפית המארח הוא קצת צעד אחורה. - nijave