Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

डॉकर एप्लिकेशन को MySQL से कनेक्ट नहीं कर सकता

डॉकर-कंपोज़ डिफ़ॉल्ट रूप से वर्चुअल नेटवर्क बनाएगा, कंपोज़ फ़ाइल में सभी कंटेनर/सेवाएं आईपी पते से एक-दूसरे तक पहुंच सकती हैं। links . का उपयोग करके , depends_on या नेटवर्क उपनाम वे होस्ट नाम से एक दूसरे तक पहुँच सकते हैं। आपके मामले में होस्ट नाम सेवा का नाम है, लेकिन इसे ओवरराइड किया जा सकता है। (देखें:docs )

my_common_package . में आपकी स्क्रिप्ट कंटेनर/सेवा को तब mysql से कनेक्ट होना चाहिए पोर्ट पर 3306 आपके सेटअप के अनुसार। (नहीं localhost पोर्ट पर 3306 )

यह भी ध्यान दें कि expose . का उपयोग करके केवल तभी आवश्यक है जब सेवा के लिए Dockerfile में EXPOSE . नहीं है बयान। मानक mysql छवि पहले से ही ऐसा करती है।

यदि आप किसी कंटेनर पोर्ट को localhost में मैप करना चाहते हैं आपको ports . का उपयोग करने की आवश्यकता है , लेकिन ऐसा केवल तभी करें जब यह आवश्यक हो।

services:
   mysql:
     image: mysql:5.6
     container_name: test_mysql_container
     environment:
       - MYSQL_ROOT_PASSWORD=test
       - MYSQL_DATABASE=My_Database
       - MYSQL_USER=my_user
       - MYSQL_PASSWORD=my_password
     volumes:
       - db_data:/var/lib/mysql
     ports:
       - "3306:3306"

यहां हम कह रहे हैं कि mysql कंटेनर में पोर्ट 3306 को पोर्ट 3306 पर लोकलहोस्ट में मैप किया जाना चाहिए।

अब आप localhost:3306 . का उपयोग करके mysql से जुड़ सकते हैं डॉकटर के बाहर। उदाहरण के लिए आप अपना testsql.py run चलाने का प्रयास कर सकते हैं स्थानीय रूप से (कंटेनर में नहीं)।

कंटेनर से कंटेनर संचार हमेशा प्रत्येक कंटेनर के होस्ट नाम का उपयोग करके होगा। कंटेनरों को वर्चुअल मशीन के रूप में सोचें।

आप docker network list . का उपयोग करके बनाए गए नेटवर्क docker-compose को भी ढूंढ सकते हैं :

1b1a54630639        myproject_default             bridge              local
82498fd930bb        bridge                        bridge              local

.. फिर docker network inspect <id> . का उपयोग करें विवरण देखने के लिए।

कंटेनरों को असाइन किए गए आईपी पते बहुत यादृच्छिक हो सकते हैं, इसलिए कंटेनर से कंटेनर संचार के लिए एकमात्र व्यवहार्य तरीका होस्टनाम का उपयोग करना है।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. पंक्ति उत्पाद प्राप्त करें (गुणा)

  2. चेतावनी उपयोगकर्ता/स्थानीय/mysql/डेटा निर्देशिका mysql उपयोगकर्ता के स्वामित्व में नहीं है

  3. MySQLNonTransientConnectionException डेटाबेस सर्वर से कनेक्शन नहीं बना सका। इसके कारण:java.lang.NullPointerException

  4. mysql में टाइमस्टैम्प प्रारूप कैसे बदलें?

  5. MAX और GROUP BY का उपयोग करके सभी संबंधित फ़ील्ड का चयन करना