הבאג הבא בדוקר קומפוז כמעט עבר לי מתחת לרדאר
לא מזמן העברתי איזה פרויקט לשרת בדיקות, בשביל לחסוך התקנות שמתי שם docker compose והבלוק של הרדיס נראה ככה:
redis:
image: redis
ports:
- 6379:6379
אחרי שעתיים הרדיס התרסק ובלוג הופיעה הודעה דומה להודעה הבאה (רק עם תאריך אחר בהתחלה):
1:S 25 Jun 2021 00:48:12.902 * MASTER <-> REPLICA sync started
הפעלה מחדש של רדיס, הכל שוב עבד ואחרי שעתיים הודעת השגיאה חזרה ללוג. בגלל שזה שרת בדיקות לאף אחד לא היה אכפת, וההודעה קוטלגה בתור מוזרות של העולם שבטח תיפטר לבד כשנעבור לשרת אמיתי.
יכולים לראות מה הבעיה האמיתית שם?
1. פיתרון
הדבר הכי חשוב לעשות עם בעיות כאלה הוא פשוט להתיחס אליהן, לא לטאטא מתחת לשטיח. הרי זה לא יכול להיות משהו גדול - כולם משתמשים ברדיס מתוך קונטיינרים והכל עובד ליותר משעתיים. גם אם ההשפעה של התקלה נראית סופר שולית (מה הבעיה לעשות ריסטרט לרדיס פעם ביום על שרת הבדיקות), זה עדיין משהו שאפשר ושווה לתקן בקלות.
במקרה שלנו התשובה עלתה בחיפוש מהיר ב Stack Overflow: https://stackoverflow.com/questions/68124389/redis-error-condition-on-socket-for-sync-connection-refused
הגדרת ה ports ב docker-compose.yml גרמה לרדיס להקשיב לפקודות מכל העולם. מספיק לקבל פקודה מרושעת אחת והרדיס מפסיק לעבוד, וממילא באימג' ברירת המחדל החיבור הוא ללא סיסמה.
ולכן גם הפיתרון הפשוט: מוחקים את הגדרת ה ports. אפשר להחליף אותה ב expose ואפשר גם על זה לוותר. מה שחשוב זה לא להשאיר את פורט 6379 פתוח לכל העולם על שרת, כי אפילו אם זה רק שרת בדיקות יש מי שסורק את כל כתובות ה IP של העולם בחיפוש אחר רדיסים פתוחים.