होस्ट मशीनवर डॉकरमधील Nginx ला Localhost MySQL ला कनेक्ट करत आहे

होस्ट मशीनवर डॉकरमधील Nginx ला Localhost MySQL ला कनेक्ट करत आहे
Shell

डॉकर कंटेनरमधून लोकलहोस्ट सेवांमध्ये प्रवेश करणे

होस्ट मशीनवर MySQL उदाहरणाशी कनेक्ट करण्याची आवश्यकता असताना डॉकर कंटेनरमध्ये Nginx चालवणे आव्हानात्मक असू शकते, विशेषत: जेव्हा MySQL फक्त लोकलहोस्टला बांधलेले असते. हे सेटअप कंटेनरला मानक नेटवर्किंग पद्धती वापरून MySQL सेवेत थेट प्रवेश करण्यापासून प्रतिबंधित करते.

हा लेख हा अंतर भरून काढण्यासाठी विविध उपाय शोधतो, ज्यामुळे डॉकर कंटेनर आणि होस्टच्या लोकलहोस्टवर चालणाऱ्या सेवांमध्ये अखंड कनेक्टिव्हिटी मिळते. आम्ही सामान्य पद्धती का कमी पडू शकतात यावर चर्चा करू आणि इच्छित कनेक्टिव्हिटी प्राप्त करण्यासाठी व्यावहारिक पावले देऊ.

आज्ञा वर्णन
docker network create --driver bridge hostnetwork ब्रिज ड्रायव्हरसह सानुकूल डॉकर नेटवर्क तयार करते, कंटेनरला त्याच नेटवर्कमध्ये संवाद साधण्याची परवानगी देते.
host_ip=$(ip -4 addr show docker0 | grep -oP '(? होस्टच्या डॉकर0 इंटरफेसचा IP पत्ता काढतो, जो कंटेनरपासून होस्ट सेवांशी जोडण्यासाठी वापरला जातो.
docker exec -it nginx-container bash थेट कमांड-लाइन ऍक्सेससाठी चालू असलेल्या Nginx कंटेनरमध्ये इंटरएक्टिव्ह बॅश शेल कार्यान्वित करते.
mysql -h $host_ip -u root -p एक्सट्रॅक्ट केलेला आयपी ॲड्रेस वापरून होस्ट मशीनवर चालणाऱ्या MySQL सर्व्हरशी कनेक्ट करण्यासाठी Nginx कंटेनरमध्ये कमांड वापरली जाते.
networks: hostnetwork: external: true बाहेरून तयार केलेले डॉकर नेटवर्क वापरण्यासाठी डॉकर कंपोजमधील कॉन्फिगरेशन.
echo "server { listen 80; location / { proxy_pass http://host.docker.internal:3306; } }" >echo "server { listen 80; location / { proxy_pass http://host.docker.internal:3306; } }" > /etc/nginx/conf.d/default.conf होस्ट मशीनला MySQL विनंत्या प्रॉक्सी करण्यासाठी नवीन Nginx कॉन्फिगरेशन लिहिते.
nginx -s reload नवीन कॉन्फिगरेशन बदल लागू करण्यासाठी Nginx सेवा रीलोड करते.

होस्ट सेवांमध्ये प्रवेश करण्यासाठी डॉकर आणि Nginx कॉन्फिगर करत आहे

Nginx कंटेनरला होस्टवर चालणाऱ्या MySQL उदाहरणाशी जोडण्यासाठी, आम्हाला प्रथम नेटवर्क ब्रिज स्थापित करणे आवश्यक आहे. आज्ञा docker network create --driver bridge hostnetwork हे सानुकूल नेटवर्क तयार करते, समान नेटवर्कवरील कंटेनर दरम्यान संवाद सक्षम करते. त्यानंतर आम्ही या नेटवर्कवर MySQL आणि Nginx कंटेनर वापरून सुरू करतो आणि docker run --name nginx-container --network hostnetwork -d nginx:latest, अनुक्रमे. हे सेटअप कंटेनरना एकमेकांना शोधू आणि संवाद साधण्यास अनुमती देते. Nginx वरून MySQL शी कनेक्ट करण्यासाठी, आम्हाला होस्टचा IP पत्ता आवश्यक आहे, जो यासह मिळवता येईल host_ip=$(ip -4 addr show docker0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}'). ही कमांड होस्टवरील docker0 इंटरफेसचा IP पत्ता कॅप्चर करते.

पुढे, आम्ही वापरतो docker exec -it nginx-container bash Nginx कंटेनरमध्ये परस्परसंवादी शेल उघडण्यासाठी. येथून, आम्ही वापरून MySQL कनेक्शन सुरू करू शकतो , कुठे $host_ip होस्टचा IP पत्ता आहे. वैकल्पिकरित्या, डॉकर कंपोझ वापरणे YAML फाइलमध्ये सेवा आणि नेटवर्क परिभाषित करून प्रक्रिया सुलभ करते. द कॉन्फिगरेशन हे सुनिश्चित करते की सेवा बाह्यरित्या तयार केलेले नेटवर्क वापरतात. शेवटी, प्रॉक्सी MySQL विनंत्यांना Nginx कॉन्फिगर करण्यासाठी, आम्ही त्याची कॉन्फिगरेशन फाइल यासह अद्यतनित करतो echo "server { listen 80; location / { proxy_pass http://host.docker.internal:3306; } }" > /etc/nginx/conf.d/default.conf आणि Nginx वापरून रीलोड करा . हा सेटअप Nginx ला होस्टवर चालणाऱ्या MySQL उदाहरणावर विनंत्या अग्रेषित करण्यास अनुमती देतो.

नेटवर्क ब्रिजद्वारे डॉकर कंटेनर होस्टच्या MySQL शी कनेक्ट करत आहे

डॉकर नेटवर्क सेटअपसाठी शेल स्क्रिप्ट

# Create a Docker network
docker network create --driver bridge hostnetwork

# Run MySQL container with the created network
docker run --name mysql-container --network hostnetwork -e MYSQL_ROOT_PASSWORD=root -d mysql:latest

# Run Nginx container with the created network
docker run --name nginx-container --network hostnetwork -d nginx:latest

# Get the host machine's IP address
host_ip=$(ip -4 addr show docker0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}')

# Connect to MySQL from within the Nginx container
docker exec -it nginx-container bash
mysql -h $host_ip -u root -p

Nginx आणि होस्टच्या MySQL ला लिंक करण्यासाठी डॉकर कंपोझ वापरणे

डॉकर कंपोझ YAML कॉन्फिगरेशन

डॉकर नेटवर्क वापरून होस्ट MySQL शी कनेक्ट करण्यासाठी Nginx कॉन्फिगर करत आहे

Nginx कॉन्फिगरेशन आणि डॉकर नेटवर्क कमांड

# Create a bridge network
docker network create bridge-network

# Run Nginx container with bridge network
docker run --name nginx-container --network bridge-network -d nginx:latest

# Run MySQL container on the host network
docker run --name mysql-container --network host -e MYSQL_ROOT_PASSWORD=root -d mysql:latest

# Update Nginx configuration to point to MySQL host
docker exec -it nginx-container bash
echo "server { listen 80; location / { proxy_pass http://host.docker.internal:3306; } }" > /etc/nginx/conf.d/default.conf
nginx -s reload

स्थानिक सेवा होस्ट करण्यासाठी डॉकर कंटेनर कनेक्ट करत आहे

डॉकर कंटेनरमध्ये ऍप्लिकेशन्स चालवताना, होस्टच्या लोकलहोस्टशी बंधनकारक सेवांमध्ये प्रवेश करणे नेटवर्क अलगावमुळे आव्हानात्मक असू शकते. डॉकरचा होस्ट नेटवर्किंग मोड वापरणे हा एक प्रभावी दृष्टीकोन आहे. सह कंटेनर सुरू करून --network host पर्याय, कंटेनर होस्टचे नेटवर्क स्टॅक सामायिक करतो, त्याला स्थानिक होस्ट-बाउंड सेवांमध्ये थेट प्रवेश करण्याची परवानगी देतो. तथापि, हा मोड कमी पोर्टेबल आहे आणि डॉकर स्वार्म किंवा कुबर्नेट्स सारख्या सर्व वातावरणात चांगले कार्य करू शकत नाही.

डॉकरचे अंगभूत DNS रिझोल्व्हर वापरणे हा दुसरा दृष्टिकोन आहे, host.docker.internal. हे विशेष DNS नाव होस्टच्या IP पत्त्याचे निराकरण करते, कंटेनरला होस्टवरील सेवांशी संवाद साधण्यास सक्षम करते. ही पद्धत सरळ आहे आणि नेटवर्क व्यवस्थापनातील गुंतागुंत टाळते. तथापि, हे फक्त विंडोज आणि मॅकसाठी डॉकरवर उपलब्ध आहे, लिनक्सवर नाही. लिनक्स वापरकर्त्यांसाठी, सानुकूल ब्रिज नेटवर्क तयार करणे आणि राउटिंग नियम मॅन्युअली कॉन्फिगर करणे हा एक व्यवहार्य उपाय आहे. यामध्ये वापरणे समाविष्ट आहे ip आणि iptables कंटेनर नेटवर्कवरून होस्टच्या लोकलहोस्ट इंटरफेसवर रहदारी मार्गी लावण्यासाठी आदेश.

होस्ट सेवांशी डॉकर कंटेनर कनेक्ट करण्याबद्दल सामान्य प्रश्न

  1. मी कसे वापरू --network host डॉकरमध्ये पर्याय?
  2. यासह आपले कंटेनर चालवा १५ होस्टचे नेटवर्क स्टॅक शेअर करण्यासाठी.
  3. काय आहे host.docker.internal?
  4. हे एक विशेष DNS नाव आहे जे होस्टच्या IP पत्त्याचे निराकरण करते, Windows आणि Mac साठी Docker वर उपलब्ध आहे.
  5. मी वापरू शकतो host.docker.internal लिनक्स वर?
  6. नाही, हे वैशिष्ट्य लिनक्ससाठी डॉकरवर उपलब्ध नाही.
  7. मी कस्टम ब्रिज नेटवर्क कसे तयार करू शकतो?
  8. वापरा १८ सानुकूल ब्रिज नेटवर्क तयार करण्यासाठी.
  9. चा उद्देश काय आहे iptables आज्ञा?
  10. हे लिनक्स सिस्टमवर नेटवर्क पॅकेट फिल्टरिंग आणि रूटिंग नियम व्यवस्थापित करते.
  11. मी डॉकर कंटेनरमधून होस्टवरील MySQL उदाहरणाशी कसे कनेक्ट करू?
  12. वापरा mysql -h host.docker.internal -u root -p विंडोज/मॅकवरील डॉकरसाठी किंवा लिनक्ससाठी राउटिंग कॉन्फिगर करा.
  13. वापरण्याच्या मर्यादा काय आहेत --network host?
  14. हे पोर्टेबिलिटी कमी करू शकते आणि Kubernetes सारख्या काही ऑर्केस्ट्रेटरशी सुसंगत नाही.
  15. मी MySQL व्यतिरिक्त होस्टवरील इतर सेवांमध्ये प्रवेश करू शकतो का?
  16. होय, त्याच पद्धतींचा वापर करून, तुम्ही होस्टवर चालू असलेल्या कोणत्याही सेवेशी कनेक्ट करू शकता.

डॉकरकडून होस्ट सेवांमध्ये प्रवेश करण्याचे अंतिम विचार

Nginx कंटेनरवरून होस्टवरील MySQL उदाहरणाशी कनेक्ट होण्यामध्ये विविध पद्धतींचा समावेश असतो, प्रत्येकाचे स्वतःचे फायदे आणि मर्यादा असतात. होस्ट नेटवर्किंग, विशेष DNS नावे किंवा सानुकूल नेटवर्क ब्रिज वापरणे प्रभावीपणे अंतर भरून काढू शकतात, डॉकर कंटेनर आणि होस्ट सेवा यांच्यातील सुरळीत संवाद सुनिश्चित करतात. या धोरणे समजून घेऊन आणि अंमलात आणून, तुम्ही नेटवर्क अलगावच्या आव्हानांवर मात करू शकता आणि तुमच्या डॉकराइज्ड वातावरणात मजबूत कनेक्शन राखू शकता.