פרסום פורטים ב-Docker: ‏127.0.0.1, ‏0.0.0.0 ו-ufw

מי מגיע לפורט של container תלוי באופן שבו הוא מפורסם, ולא ב-ufw. עברו בין פורט שלא פורסם, פורט שפורסם על כל הכתובות ופורט שפורסם על 127.0.0.1, עם ufw פעיל או כבוי, וראו מי עובר.

פורסם ב-13 באוקטובר 2026

שרת עם ufw שחוסם תעבורה נכנסת נראה סגור. ואז קובץ Compose מפרסם פורט של מסד נתונים, ומסד הנתונים נגיש מהאינטרנט בכל זאת.

ההסבר הזה מראה את שלושת המקומות שמהם בקשה יכולה להגיע, ואיך כל דרך לפרסם פורט משנה מי מהם מגיע ל-container.

נסו בעצמכם

פרסום הפורט
‏ufw, חסימת תעבורה נכנסת
מי מגיע לפורט של ה-container ערכים לדוגמה
  • האינטרנטחסום הפורט לא מפורסם.
  • ה-host של Dockerמגיע ה-host מגיע לכל פורט של container ברשתות ה-bridge שלו.
  • ‏container באותה רשתמגיע ‏Containers באותה רשת מגיעים זה לפורטים של זה לפי שם.

‏container, פורט 80

מיפוי פורט: אין רשומת ports:

ufw: כבוי

מהאינטרנט: חסום. מה-host: מגיע. מאותה רשת: מגיע.

שלב אחר שלב

  1. ‏Compose מציב את השירותים של פרויקט ברשת bridge משלהם. כל פורט של container ברשת הזו נגיש מה-host של Docker ומה-containers האחרים באותה רשת, לפי שם השירות, בין אם פורסם ובין אם לא.

    שום דבר מחוץ לשרת לא מגיע אליו: בלי ports:, ל-container אין כתובת באינטרנט.

  2. ב-ports: ["8080:80"] אין כתובת host, ולכן Docker מפרסם את הפורט על כולן: 0.0.0.0 ו-[::]. כל מי שמגיע לכתובת ה-IP הציבורית של השרת בפורט 8080 מגיע עכשיו לפורט 80 של ה-container.

    זה מה שמיפוי פורט שהועתק מ-README עושה בדרך כלל.

  3. הפעילו את ufw עם ברירת המחדל "deny incoming" והפורט נשאר פתוח. ‏Docker מנתב תעבורה לפורט מפורסם בכללי סינון משלו, לפני שהכללים של ufw מופעלים, ולכן ufw לא רואה אותה בכלל.

    כדי לסנן פורט מפורסם, השתמשו בשרשרת DOCKER-USER של Docker או בחומת האש של הספק, או אל תפרסמו אותו על כתובת ציבורית בכלל.

  4. ‏ports: ["127.0.0.1:8080:80"] מפרסם את הפורט על כתובת ה-loopback בלבד. ה-host מגיע אליו ב-localhost:8080; האינטרנט לא, עם ufw או בלעדיו.

    הציבו reverse proxy לפני מה שצריך להיות ציבורי, וגשו לממשקי ניהול דרך SSH tunnel: ssh -L 8080:127.0.0.1:8080 <user>@<server>.

ערכים לדוגמה הפורטים 8080 ו-80 הם ערכים לדוגמה.

מה התרשים מראה

התרשים מראה container עם פורט 80, מיפוי פורט, ufw ושלושה מקורות: האינטרנט, ה-host של Docker ו-container אחר באותה רשת. כל מקור מסומן "מגיע" או "חסום", עם הסיבה.

הבקרים בוחרים איך הפורט מפורסם (לא מפורסם, על כל הכתובות, על 127.0.0.1) והאם ufw חוסם תעבורה נכנסת. רק פרסום על כל הכתובות מכניס את האינטרנט, ו-ufw לא משנה את זה; ה-host וה-containers באותה רשת מגיעים לפורט תמיד.

נסו בכלי

פתחו את Docker Compose Analyzer

מה לא מכוסה כאן

מכסה את רשתות ה-bridge של Docker Engine עם כללי ה-iptables של ברירת המחדל ב-Linux. ‏Docker במצב rootless, ‏Docker Desktop, מצב רשת host והגדרות חומת אש מותאמות מתנהגים אחרת.

מקורות

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

כל ההסברים