דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. חיבור למסד נתונים בדוקר 2

חיבור למסד נתונים בדוקר 2

מתוזמן נעוץ נעול הועבר תכנות
17 פוסטים 4 כותבים 330 צפיות 4 עוקבים
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • שואףש מנותק
    שואףש מנותק
    שואף
    כתב ב נערך לאחרונה על ידי
    #1

    אחרי העזרה הנפלאה של @aaron בפוסט הקודם, שמתי לב שהדוגמא שהבאתי טיפה שונה מהמקרה המקורי שלי.

    האפליקציה הראשית, צריכה להיות במצב HOST, דהיינו שמשתמשת ברשת של השרת המארח. וממילא כבר לא שייך לעשות LINK לקונטיינר של המסד נתונים (הם אומרים שאין משמעות לLINK במצב HOST). אבל המסד נתונים הוא נשאר בBRIDGE, אין צורך שיהיה בHOST.

    ממילא כבר אי אפשר להתחבר לקונטיינר של המסד נתונים על ידי שימוש בשם השרת שהגדרתי בcontainer_name, אלא רק על ידי חיבור לכתובת אייפי הפנימית של הקונטיינר.
    זה לא סוף העולם, אבל לא מרגיש לי נכון להשתמש בכתובת אייפי שהיא מן הסתם דינמית (יצא לי 172.19.0.2) ועלולה להשתנות ולהפיל את הפרוייקט.

    יש רעיון איך להגדיר בכל זאת שם לקונטיינר ולהתחבר אליו ישירות?

    תודה
    מצורף הקובץ DOCKER-COMPOSE

    version: '3.1'
    
    services:
      db:
        image: mariadb:10.5
        container_name: maindb
        environment:
          MYSQL_ROOT_PASSWORD: 54fghjghjk44RkjJHkhgv3798
    
      main:
        build: .
        container_name: main
        network_mode: host
        depends_on:
          - db
    #    links:
    #      - db:maindb
    

    והקובץ ODBC.INI

    [MySQL-main]
    Description=MySQL connection
    driver=MySQL
    server=172.19.0.2
    ;server=maindb
    Port=3306
    ;Socket=/var/run/mysqld/mysqld.sock
    option=3
    Charset=utf8
    

    ליצירת קשר: admin@i-call.me

    הידד! גישה למייל גם בלי מחשב ואינטרנט!

    י תגובה 1 תגובה אחרונה
    0
    • שואףש שואף

      אחרי העזרה הנפלאה של @aaron בפוסט הקודם, שמתי לב שהדוגמא שהבאתי טיפה שונה מהמקרה המקורי שלי.

      האפליקציה הראשית, צריכה להיות במצב HOST, דהיינו שמשתמשת ברשת של השרת המארח. וממילא כבר לא שייך לעשות LINK לקונטיינר של המסד נתונים (הם אומרים שאין משמעות לLINK במצב HOST). אבל המסד נתונים הוא נשאר בBRIDGE, אין צורך שיהיה בHOST.

      ממילא כבר אי אפשר להתחבר לקונטיינר של המסד נתונים על ידי שימוש בשם השרת שהגדרתי בcontainer_name, אלא רק על ידי חיבור לכתובת אייפי הפנימית של הקונטיינר.
      זה לא סוף העולם, אבל לא מרגיש לי נכון להשתמש בכתובת אייפי שהיא מן הסתם דינמית (יצא לי 172.19.0.2) ועלולה להשתנות ולהפיל את הפרוייקט.

      יש רעיון איך להגדיר בכל זאת שם לקונטיינר ולהתחבר אליו ישירות?

      תודה
      מצורף הקובץ DOCKER-COMPOSE

      version: '3.1'
      
      services:
        db:
          image: mariadb:10.5
          container_name: maindb
          environment:
            MYSQL_ROOT_PASSWORD: 54fghjghjk44RkjJHkhgv3798
      
        main:
          build: .
          container_name: main
          network_mode: host
          depends_on:
            - db
      #    links:
      #      - db:maindb
      

      והקובץ ODBC.INI

      [MySQL-main]
      Description=MySQL connection
      driver=MySQL
      server=172.19.0.2
      ;server=maindb
      Port=3306
      ;Socket=/var/run/mysqld/mysqld.sock
      option=3
      Charset=utf8
      
      י מנותק
      י מנותק
      יוסף בן שמעון
      כתב ב נערך לאחרונה על ידי
      #2

      @שואף למה אתה צריך לעבוד עם הרשת של המארח?

      שואףש תגובה 1 תגובה אחרונה
      1
      • י יוסף בן שמעון

        @שואף למה אתה צריך לעבוד עם הרשת של המארח?

        שואףש מנותק
        שואףש מנותק
        שואף
        כתב ב נערך לאחרונה על ידי
        #3

        @יוסף-בן-שמעון אסטריסק דורש פורטים של RTP מרובים, אין אפשרות לפתוח את כולם (מדובר על כמה אלפים, ודוקר יכול לפתוח רק כמה פורטים בודדים)

        ליצירת קשר: admin@i-call.me

        הידד! גישה למייל גם בלי מחשב ואינטרנט!

        י תגובה 1 תגובה אחרונה
        2
        • שואףש שואף

          @יוסף-בן-שמעון אסטריסק דורש פורטים של RTP מרובים, אין אפשרות לפתוח את כולם (מדובר על כמה אלפים, ודוקר יכול לפתוח רק כמה פורטים בודדים)

          י מנותק
          י מנותק
          יוסף בן שמעון
          כתב ב נערך לאחרונה על ידי
          #4

          @שואף אז בעצם אתה רוצה להתחבר מהרשת המארחת לרשת הפנימית של המיכל, אם כן expose פשוט אמור לפתור את זה.

          שואףש תגובה 1 תגובה אחרונה
          2
          • י יוסף בן שמעון

            @שואף אז בעצם אתה רוצה להתחבר מהרשת המארחת לרשת הפנימית של המיכל, אם כן expose פשוט אמור לפתור את זה.

            שואףש מנותק
            שואףש מנותק
            שואף
            כתב ב נערך לאחרונה על ידי
            #5

            @יוסף-בן-שמעון אמר בחיבור למסד נתונים בדוקר 2:

            @שואף אז בעצם אתה רוצה להתחבר מהרשת המארחת לרשת הפנימית של המיכל, אם כן expose פשוט אמור לפתור את זה.

            לא עוזר. עדיין אפשר להתחבר בתור כתובת אייפי אבל לא עם שם הקונטיינר.

            ליצירת קשר: admin@i-call.me

            הידד! גישה למייל גם בלי מחשב ואינטרנט!

            A תגובה 1 תגובה אחרונה
            0
            • שואףש שואף

              @יוסף-בן-שמעון אמר בחיבור למסד נתונים בדוקר 2:

              @שואף אז בעצם אתה רוצה להתחבר מהרשת המארחת לרשת הפנימית של המיכל, אם כן expose פשוט אמור לפתור את זה.

              לא עוזר. עדיין אפשר להתחבר בתור כתובת אייפי אבל לא עם שם הקונטיינר.

              A מנותק
              A מנותק
              aaron
              כתב ב נערך לאחרונה על ידי
              #6

              @שואף אמר בחיבור למסד נתונים בדוקר 2:

              @יוסף-בן-שמעון אמר בחיבור למסד נתונים בדוקר 2:

              @שואף אז בעצם אתה רוצה להתחבר מהרשת המארחת לרשת הפנימית של המיכל, אם כן expose פשוט אמור לפתור את זה.

              לא עוזר. עדיין אפשר להתחבר בתור כתובת אייפי אבל לא עם שם הקונטיינר.

              אם אתה עושה expose, אז אתה מתחבר לlocalhost.

              aaron.tchumim@gmail.com
              Hetzner - שרתים וירטואליים ופיזיים במחירים מעולים (קישור שותפים)

              ווצאפ API - תיעוד שירות API לא רשמי.

              שואףש 2 תגובות תגובה אחרונה
              1
              • A aaron

                @שואף אמר בחיבור למסד נתונים בדוקר 2:

                @יוסף-בן-שמעון אמר בחיבור למסד נתונים בדוקר 2:

                @שואף אז בעצם אתה רוצה להתחבר מהרשת המארחת לרשת הפנימית של המיכל, אם כן expose פשוט אמור לפתור את זה.

                לא עוזר. עדיין אפשר להתחבר בתור כתובת אייפי אבל לא עם שם הקונטיינר.

                אם אתה עושה expose, אז אתה מתחבר לlocalhost.

                שואףש מנותק
                שואףש מנותק
                שואף
                כתב ב נערך לאחרונה על ידי
                #7

                @aaron

                
                root@docker:~# mysql -u root -p54fghjghjk44RkjJHkhgv3798 -h localhost -P 3306
                mysql: [Warning] Using a password on the command line interface can be insecure.
                ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
                

                ליצירת קשר: admin@i-call.me

                הידד! גישה למייל גם בלי מחשב ואינטרנט!

                י תגובה 1 תגובה אחרונה
                0
                • A aaron

                  @שואף אמר בחיבור למסד נתונים בדוקר 2:

                  @יוסף-בן-שמעון אמר בחיבור למסד נתונים בדוקר 2:

                  @שואף אז בעצם אתה רוצה להתחבר מהרשת המארחת לרשת הפנימית של המיכל, אם כן expose פשוט אמור לפתור את זה.

                  לא עוזר. עדיין אפשר להתחבר בתור כתובת אייפי אבל לא עם שם הקונטיינר.

                  אם אתה עושה expose, אז אתה מתחבר לlocalhost.

                  שואףש מנותק
                  שואףש מנותק
                  שואף
                  כתב ב נערך לאחרונה על ידי
                  #8

                  @aaron @יוסף-בן-שמעון אני מדבר על אפליקציה במצב HOST ומסד נתונים במצב BRIDGE. ואז השאלה איך לגשת מהאפליקציה לנתונים בלי להשתמש בכתובת אייפי החמקמקה.
                  ברור שאם אגדיר המסד נתונים במצב HOST אוכל לגשת עם LOCALHOST, אבל אני מנסה להמנע מלחשוף שירותים שאינם נחוצים (או שאולי זה לא כזה נורא ואפשר לוותר על הזהירות הזו?)

                  ליצירת קשר: admin@i-call.me

                  הידד! גישה למייל גם בלי מחשב ואינטרנט!

                  תגובה 1 תגובה אחרונה
                  0
                  • שואףש שואף

                    @aaron

                    
                    root@docker:~# mysql -u root -p54fghjghjk44RkjJHkhgv3798 -h localhost -P 3306
                    mysql: [Warning] Using a password on the command line interface can be insecure.
                    ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
                    
                    י מנותק
                    י מנותק
                    יוסף בן שמעון
                    כתב ב נערך לאחרונה על ידי יוסף בן שמעון
                    #9

                    @שואף אמר בחיבור למסד נתונים בדוקר 2:

                    @aaron

                    
                    root@docker:~# mysql -u root -p54fghjghjk44RkjJHkhgv3798 -h localhost -P 3306
                    mysql: [Warning] Using a password on the command line interface can be insecure.
                    ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
                    

                    כלומר - אותה הפקודה בדיוק מאותה המכונה, עם אייפי עובדת ועם לוקאלהוסט לא עובדת?
                    אחרי שערכת את הדוקר קומפוז עשית DOWN ו UP?

                    שואףש תגובה 1 תגובה אחרונה
                    2
                    • י יוסף בן שמעון

                      @שואף אמר בחיבור למסד נתונים בדוקר 2:

                      @aaron

                      
                      root@docker:~# mysql -u root -p54fghjghjk44RkjJHkhgv3798 -h localhost -P 3306
                      mysql: [Warning] Using a password on the command line interface can be insecure.
                      ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
                      

                      כלומר - אותה הפקודה בדיוק מאותה המכונה, עם אייפי עובדת ועם לוקאלהוסט לא עובדת?
                      אחרי שערכת את הדוקר קומפוז עשית DOWN ו UP?

                      שואףש מנותק
                      שואףש מנותק
                      שואף
                      כתב ב נערך לאחרונה על ידי שואף
                      #10

                      @יוסף-בן-שמעון כן וכן.
                      במילים אחרות, אם אני מפעיל דוקר של MYQSL במצב BRIDGE ועושה EXPOSE לפורט 3306, אני לא מצליח להתחבר אליו מהשרת הHOST

                      version: '3.1'
                      
                      services:
                        db:
                          image: mariadb:10.5
                          container_name: testdb
                          network_mode: bridge
                          expose:
                            - 3306
                          environment:
                            MYSQL_ROOT_PASSWORD: 54fghjghjk44RkjJHkhgv3798
                      

                      הצורה היחידה שאני מצליח להתחבר זה לעשות

                      docker inspect testdb  | grep IPAddress
                      

                      שמחזיר לי אייפי "172.17.0.2" ואז אני יכול להתחבר כך

                      mysql -u root -p54fghjghjk44RkjJHkhgv3798 -h "172.17.0.2"
                      

                      ליצירת קשר: admin@i-call.me

                      הידד! גישה למייל גם בלי מחשב ואינטרנט!

                      רפאלר תגובה 1 תגובה אחרונה
                      0
                      • A מנותק
                        A מנותק
                        aaron
                        כתב ב נערך לאחרונה על ידי
                        #11

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

                        https://github.com/docker/compose/issues/3211 אולי זה יתן כיוון

                        aaron.tchumim@gmail.com
                        Hetzner - שרתים וירטואליים ופיזיים במחירים מעולים (קישור שותפים)

                        ווצאפ API - תיעוד שירות API לא רשמי.

                        שואףש תגובה 1 תגובה אחרונה
                        1
                        • A aaron

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

                          https://github.com/docker/compose/issues/3211 אולי זה יתן כיוון

                          שואףש מנותק
                          שואףש מנותק
                          שואף
                          כתב ב נערך לאחרונה על ידי
                          #12

                          @aaron זה כיוון מעניין.
                          אבל אין לזה פיתרון נורמלי? אף אחד לא חשב על זה עדיין, שצריכים לתת גישה נורמלית מהשרת המארח לקונטיינר.
                          גיגלתי הרבה, לא מצאתי על זה תשובה ברורה, מוזר לא?

                          ליצירת קשר: admin@i-call.me

                          הידד! גישה למייל גם בלי מחשב ואינטרנט!

                          A תגובה 1 תגובה אחרונה
                          0
                          • שואףש שואף

                            @aaron זה כיוון מעניין.
                            אבל אין לזה פיתרון נורמלי? אף אחד לא חשב על זה עדיין, שצריכים לתת גישה נורמלית מהשרת המארח לקונטיינר.
                            גיגלתי הרבה, לא מצאתי על זה תשובה ברורה, מוזר לא?

                            A מנותק
                            A מנותק
                            aaron
                            כתב ב נערך לאחרונה על ידי
                            #13

                            @שואף
                            גישה נורמלית זה אומר expose. זה עובד ועובד מעולה.
                            לך זה לא עבד כי ניסת להתחבר לסוקט ולא לפורט!

                            aaron.tchumim@gmail.com
                            Hetzner - שרתים וירטואליים ופיזיים במחירים מעולים (קישור שותפים)

                            ווצאפ API - תיעוד שירות API לא רשמי.

                            שואףש תגובה 1 תגובה אחרונה
                            2
                            • A aaron

                              @שואף
                              גישה נורמלית זה אומר expose. זה עובד ועובד מעולה.
                              לך זה לא עבד כי ניסת להתחבר לסוקט ולא לפורט!

                              שואףש מנותק
                              שואףש מנותק
                              שואף
                              כתב ב נערך לאחרונה על ידי
                              #14

                              @aaron לא מבין מה שאתה אומר.
                              אני רוצה להתחבר לפורט, ולא מצאתי איך, חוץ מלאתר את כתובת האייפי ואת זה אני רוצה למנוע.
                              אבל להתחבר ל127.0.0.1 זה לא נותן בשום אופן.
                              אתה מבין את הבעייה?

                              ליצירת קשר: admin@i-call.me

                              הידד! גישה למייל גם בלי מחשב ואינטרנט!

                              תגובה 1 תגובה אחרונה
                              0
                              • שואףש שואף

                                @יוסף-בן-שמעון כן וכן.
                                במילים אחרות, אם אני מפעיל דוקר של MYQSL במצב BRIDGE ועושה EXPOSE לפורט 3306, אני לא מצליח להתחבר אליו מהשרת הHOST

                                version: '3.1'
                                
                                services:
                                  db:
                                    image: mariadb:10.5
                                    container_name: testdb
                                    network_mode: bridge
                                    expose:
                                      - 3306
                                    environment:
                                      MYSQL_ROOT_PASSWORD: 54fghjghjk44RkjJHkhgv3798
                                

                                הצורה היחידה שאני מצליח להתחבר זה לעשות

                                docker inspect testdb  | grep IPAddress
                                

                                שמחזיר לי אייפי "172.17.0.2" ואז אני יכול להתחבר כך

                                mysql -u root -p54fghjghjk44RkjJHkhgv3798 -h "172.17.0.2"
                                
                                רפאלר מנותק
                                רפאלר מנותק
                                רפאל
                                כתב ב נערך לאחרונה על ידי רפאל
                                #15

                                העובדה שיש לך אפליקציה נוספת שמשתמשת בNetwork של הHost הינה חסרת חשיבות, השאלה שלך היא כיצד ניתן לגשת לקונטיינר (bridge network mode) מבחוץ (הHost המארח).

                                המשמעות של Expose היא תיעודית בלבד, בשביל לאפשר גישה לקונטיינר מבחוץ אתה צריך לבקש זאת באופן מפורש (Publish), מעבר לעובדה שאתה לא רוצה שזה יתבצע כברירת מחדל (בשל שיקולי אבטחה), אתה גם מעוניין לקבוע באיזה פורט התהליך (שמאזין בקונטיינר) יהיה זמין בHost.

                                התהליך מתבצע באמצעות מיפוי פורט X בקונטיינר לפורט Y בHost.

                                להלן מספר דוגמאות מתוך הדוקומנטציה:

                                פקודה תיאור
                                docker run -p 8080:80 מפה את פורט 80 בקונטיינר לפורט 8080 בHost
                                docker run -p 192.168.1.100:8080:80 מפה את פורט 80 TCP בקונטיינר לפורט 8080 בHost עבור חיבורים לHost באמצעות האייפיי 192.168.1.100
                                docker run -p 8080:80/tcp -p 8080:80/udp מפה את פורט TCP-80 בקונטיינר לפורט TCP-8080 בHost ואת פורט UDP-80 בקונטיינר לפורט 8080-UDP בHost

                                אם המיפוי של המסד נתונים יתבצע באופן דלהלן "3306:3306", המסד יהיה זמין בפורט 3306 של הlocalhost.

                                
                                services:
                                  db:
                                    image: mariadb:10.5
                                    environment:
                                      MYSQL_ROOT_PASSWORD: 54fghjghjk44RkjJHkhgv3798
                                    ports:
                                      - "3306:3306"
                                
                                שואףש תגובה 1 תגובה אחרונה
                                5
                                • רפאלר רפאל

                                  העובדה שיש לך אפליקציה נוספת שמשתמשת בNetwork של הHost הינה חסרת חשיבות, השאלה שלך היא כיצד ניתן לגשת לקונטיינר (bridge network mode) מבחוץ (הHost המארח).

                                  המשמעות של Expose היא תיעודית בלבד, בשביל לאפשר גישה לקונטיינר מבחוץ אתה צריך לבקש זאת באופן מפורש (Publish), מעבר לעובדה שאתה לא רוצה שזה יתבצע כברירת מחדל (בשל שיקולי אבטחה), אתה גם מעוניין לקבוע באיזה פורט התהליך (שמאזין בקונטיינר) יהיה זמין בHost.

                                  התהליך מתבצע באמצעות מיפוי פורט X בקונטיינר לפורט Y בHost.

                                  להלן מספר דוגמאות מתוך הדוקומנטציה:

                                  פקודה תיאור
                                  docker run -p 8080:80 מפה את פורט 80 בקונטיינר לפורט 8080 בHost
                                  docker run -p 192.168.1.100:8080:80 מפה את פורט 80 TCP בקונטיינר לפורט 8080 בHost עבור חיבורים לHost באמצעות האייפיי 192.168.1.100
                                  docker run -p 8080:80/tcp -p 8080:80/udp מפה את פורט TCP-80 בקונטיינר לפורט TCP-8080 בHost ואת פורט UDP-80 בקונטיינר לפורט 8080-UDP בHost

                                  אם המיפוי של המסד נתונים יתבצע באופן דלהלן "3306:3306", המסד יהיה זמין בפורט 3306 של הlocalhost.

                                  
                                  services:
                                    db:
                                      image: mariadb:10.5
                                      environment:
                                        MYSQL_ROOT_PASSWORD: 54fghjghjk44RkjJHkhgv3798
                                      ports:
                                        - "3306:3306"
                                  
                                  שואףש מנותק
                                  שואףש מנותק
                                  שואף
                                  כתב ב נערך לאחרונה על ידי
                                  #16

                                  @רפאל נפלא. חשבתי שEXPOSE זה למיפוי פנימי וPORTS לחיצוני, אבל בעצם מה שאני צריך זה נקרא חיצוני.
                                  וכמו שכתבת הEXPOSE לא אומר כלום (פעם זה לא היה ככה אם אני לא טועה)

                                  יישר כוח גדול!!!

                                  ליצירת קשר: admin@i-call.me

                                  הידד! גישה למייל גם בלי מחשב ואינטרנט!

                                  רפאלר תגובה 1 תגובה אחרונה
                                  1
                                  • שואףש שואף

                                    @רפאל נפלא. חשבתי שEXPOSE זה למיפוי פנימי וPORTS לחיצוני, אבל בעצם מה שאני צריך זה נקרא חיצוני.
                                    וכמו שכתבת הEXPOSE לא אומר כלום (פעם זה לא היה ככה אם אני לא טועה)

                                    יישר כוח גדול!!!

                                    רפאלר מנותק
                                    רפאלר מנותק
                                    רפאל
                                    כתב ב נערך לאחרונה על ידי רפאל
                                    #17

                                    @שואף נכון, בעבר Expose היה מאפשר גישה בין קונטיינרים, ובהעדרו, היה ניתן לגשת לתהליך רק מתוך הקונטיינר עצמו.

                                    תגובה 1 תגובה אחרונה
                                    2
                                    תגובה
                                    • תגובה כנושא
                                    התחברו כדי לפרסם תגובה
                                    • מהישן לחדש
                                    • מהחדש לישן
                                    • הכי הרבה הצבעות


                                    בא תתחבר לדף היומי!
                                    • התחברות

                                    • אין לך חשבון עדיין? הרשמה

                                    • התחברו או הירשמו כדי לחפש.
                                    • פוסט ראשון
                                      פוסט אחרון
                                    0
                                    • דף הבית
                                    • קטגוריות
                                    • פוסטים אחרונים
                                    • משתמשים
                                    • חיפוש
                                    • חוקי הפורום