డాకర్ కంటైనర్ల నుండి లోకల్ హోస్ట్ సేవలను యాక్సెస్ చేస్తోంది
హోస్ట్ మెషీన్లో MySQL ఉదాహరణకి కనెక్ట్ కావాల్సినప్పుడు డాకర్ కంటైనర్లో Nginxని అమలు చేయడం సవాలుగా ఉంటుంది, ప్రత్యేకించి MySQL లోకల్ హోస్ట్కు మాత్రమే కట్టుబడి ఉన్నప్పుడు. ఈ సెటప్ ప్రామాణిక నెట్వర్కింగ్ పద్ధతులను ఉపయోగించి MySQL సేవను నేరుగా యాక్సెస్ చేయకుండా కంటైనర్ను నిరోధిస్తుంది.
ఈ కథనం ఈ అంతరాన్ని తగ్గించడానికి వివిధ పరిష్కారాలను అన్వేషిస్తుంది, డాకర్ కంటైనర్లు మరియు హోస్ట్ యొక్క లోకల్ హోస్ట్లో నడుస్తున్న సేవల మధ్య అతుకులు లేని కనెక్టివిటీని అనుమతిస్తుంది. సాధారణ పద్ధతులు ఎందుకు తక్కువగా ఉండవచ్చో మేము చర్చిస్తాము మరియు కావలసిన కనెక్టివిటీని సాధించడానికి ఆచరణాత్మక దశలను అందిస్తాము.
ఆదేశం | వివరణ |
---|---|
docker network create --driver bridge hostnetwork | బ్రిడ్జ్ డ్రైవర్తో అనుకూల డాకర్ నెట్వర్క్ను సృష్టిస్తుంది, అదే నెట్వర్క్లో కమ్యూనికేట్ చేయడానికి కంటైనర్లను అనుమతిస్తుంది. |
host_ip=$(ip -4 addr show docker0 | grep -oP '(? | హోస్ట్ యొక్క docker0 ఇంటర్ఫేస్ యొక్క IP చిరునామాను సంగ్రహిస్తుంది, ఇది కంటైనర్ నుండి హోస్ట్ సేవలకు కనెక్ట్ చేయడానికి ఉపయోగించబడుతుంది. |
docker exec -it nginx-container bash | డైరెక్ట్ కమాండ్-లైన్ యాక్సెస్ కోసం నడుస్తున్న Nginx కంటైనర్లో ఇంటరాక్టివ్ బాష్ షెల్ను అమలు చేస్తుంది. |
mysql -h $host_ip -u root -p | సేకరించిన IP చిరునామాను ఉపయోగించి హోస్ట్ మెషీన్లో నడుస్తున్న 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ని కాన్ఫిగర్ చేస్తోంది
హోస్ట్లో నడుస్తున్న MySQL ఉదాహరణకి Nginx కంటైనర్ను కనెక్ట్ చేయడానికి, మేము ముందుగా నెట్వర్క్ బ్రిడ్జిని ఏర్పాటు చేయాలి. ఆదేశం docker network create --driver bridge hostnetwork ఈ అనుకూల నెట్వర్క్ని సృష్టిస్తుంది, అదే నెట్వర్క్లోని కంటైనర్ల మధ్య కమ్యూనికేషన్ను అనుమతిస్తుంది. మేము ఈ నెట్వర్క్లో MySQL మరియు Nginx కంటైనర్లను ఉపయోగించి ప్రారంభిస్తాము docker run --name mysql-container --network hostnetwork -e MYSQL_ROOT_PASSWORD=root -d mysql:latest మరియు 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}'). ఈ ఆదేశం హోస్ట్లో డాకర్0 ఇంటర్ఫేస్ యొక్క IP చిరునామాను సంగ్రహిస్తుంది.
తరువాత, మేము ఉపయోగిస్తాము docker exec -it nginx-container bash Nginx కంటైనర్లో ఇంటరాక్టివ్ షెల్ను తెరవడానికి. ఇక్కడ నుండి, మేము ఉపయోగించి MySQL కనెక్షన్ని ప్రారంభించవచ్చు mysql -h $host_ip -u root -p, ఎక్కడ $host_ip హోస్ట్ యొక్క IP చిరునామా. ప్రత్యామ్నాయంగా, డాకర్ కంపోజ్ ఉపయోగించి YAML ఫైల్లో సేవలు మరియు నెట్వర్క్లను నిర్వచించడం ద్వారా ప్రక్రియను సులభతరం చేస్తుంది. ది networks: hostnetwork: external: true సేవలు బాహ్యంగా సృష్టించబడిన నెట్వర్క్ని ఉపయోగిస్తాయని కాన్ఫిగరేషన్ నిర్ధారిస్తుంది. చివరగా, ప్రాక్సీ MySQL అభ్యర్థనలకు Nginxని కాన్ఫిగర్ చేయడానికి, మేము దాని కాన్ఫిగరేషన్ ఫైల్ను దీనితో అప్డేట్ చేస్తాము echo "server { listen 80; location / { proxy_pass http://host.docker.internal:3306; } }" > /etc/nginx/conf.d/default.conf మరియు ఉపయోగించి Nginxని రీలోడ్ చేయండి nginx -s reload. ఈ సెటప్ హోస్ట్లో నడుస్తున్న MySQL ఉదాహరణకి అభ్యర్థనలను ఫార్వార్డ్ చేయడానికి Nginxని అనుమతిస్తుంది.
నెట్వర్క్ బ్రిడ్జ్ ద్వారా హోస్ట్ యొక్క 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 కాన్ఫిగరేషన్
version: '3.8'
services:
nginx:
image: nginx:latest
container_name: nginx-container
networks:
- hostnetwork
mysql:
image: mysql:latest
container_name: mysql-container
environment:
MYSQL_ROOT_PASSWORD: root
networks:
- hostnetwork
networks:
hostnetwork:
external: true
డాకర్ నెట్వర్క్ని ఉపయోగించి హోస్ట్ 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 చిరునామాకు పరిష్కరిస్తుంది, హోస్ట్లోని సేవలతో కమ్యూనికేట్ చేయడానికి కంటైనర్లను అనుమతిస్తుంది. ఈ పద్ధతి సూటిగా ఉంటుంది మరియు నెట్వర్క్ నిర్వహణ యొక్క సంక్లిష్టతలను నివారిస్తుంది. అయినప్పటికీ, ఇది Windows మరియు Mac కోసం డాకర్లో మాత్రమే అందుబాటులో ఉంటుంది, Linuxలో కాదు. Linux వినియోగదారుల కోసం, కస్టమ్ బ్రిడ్జ్ నెట్వర్క్ను సృష్టించడం మరియు రూటింగ్ నియమాలను మాన్యువల్గా కాన్ఫిగర్ చేయడం ఒక ఆచరణీయ పరిష్కారం. ఇది ఉపయోగించడాన్ని కలిగి ఉంటుంది ip మరియు iptables కంటైనర్ నెట్వర్క్ నుండి హోస్ట్ యొక్క లోకల్ హోస్ట్ ఇంటర్ఫేస్కు ట్రాఫిక్ను రూట్ చేయడానికి ఆదేశాలు.
హోస్ట్ సర్వీస్లకు డాకర్ కంటైనర్లను కనెక్ట్ చేయడం గురించి సాధారణ ప్రశ్నలు
- నేను ఎలా ఉపయోగించగలను --network host డాకర్లో ఎంపిక?
- దీనితో మీ కంటైనర్ను నడపండి docker run --network host హోస్ట్ యొక్క నెట్వర్క్ స్టాక్ను భాగస్వామ్యం చేయడానికి.
- ఏమిటి host.docker.internal?
- ఇది Windows మరియు Mac కోసం డాకర్లో అందుబాటులో ఉండే హోస్ట్ యొక్క IP చిరునామాకు పరిష్కరించబడే ప్రత్యేక DNS పేరు.
- నేను ఉపయోగించ వచ్చునా host.docker.internal Linuxపైనా?
- లేదు, Linux కోసం డాకర్లో ఈ ఫీచర్ అందుబాటులో లేదు.
- నేను కస్టమ్ బ్రిడ్జ్ నెట్వర్క్ని ఎలా సృష్టించగలను?
- వా డు docker network create --driver bridge my-bridge-network అనుకూల వంతెన నెట్వర్క్ని సృష్టించడానికి.
- యొక్క ప్రయోజనం ఏమిటి iptables కమాండ్?
- ఇది Linux సిస్టమ్స్లో నెట్వర్క్ ప్యాకెట్ ఫిల్టరింగ్ మరియు రూటింగ్ నియమాలను నిర్వహిస్తుంది.
- డాకర్ కంటైనర్ నుండి హోస్ట్లోని MySQL ఉదాహరణకి నేను ఎలా కనెక్ట్ చేయాలి?
- వా డు mysql -h host.docker.internal -u root -p Windows/Macలో డాకర్ కోసం లేదా Linux కోసం రూటింగ్ని కాన్ఫిగర్ చేయండి.
- ఉపయోగం యొక్క పరిమితులు ఏమిటి --network host?
- ఇది పోర్టబిలిటీని తగ్గించవచ్చు మరియు కుబెర్నెటెస్ వంటి కొంతమంది ఆర్కెస్ట్రేటర్లకు అనుకూలంగా ఉండదు.
- MySQLతో పాటు హోస్ట్లో ఇతర సేవలను నేను యాక్సెస్ చేయవచ్చా?
- అవును, అదే పద్ధతులను ఉపయోగించి, మీరు హోస్ట్లో నడుస్తున్న ఏదైనా సేవకు కనెక్ట్ చేయవచ్చు.
డాకర్ నుండి హోస్ట్ సేవలను యాక్సెస్ చేయడంపై తుది ఆలోచనలు
Nginx కంటైనర్ నుండి హోస్ట్లో MySQL ఉదాహరణకి కనెక్ట్ చేయడంలో వివిధ పద్ధతులు ఉంటాయి, ప్రతి దాని స్వంత ప్రయోజనాలు మరియు పరిమితులు ఉంటాయి. హోస్ట్ నెట్వర్కింగ్, ప్రత్యేక DNS పేర్లు లేదా కస్టమ్ నెట్వర్క్ బ్రిడ్జ్లను ఉపయోగించడం వల్ల డాకర్ కంటైనర్లు మరియు హోస్ట్ సర్వీస్ల మధ్య సాఫీగా కమ్యూనికేషన్ ఉండేలా గ్యాప్ను సమర్థవంతంగా తగ్గించవచ్చు. ఈ వ్యూహాలను అర్థం చేసుకోవడం మరియు అమలు చేయడం ద్వారా, మీరు నెట్వర్క్ ఐసోలేషన్ సవాళ్లను అధిగమించవచ్చు మరియు మీ డాకరైజ్డ్ వాతావరణంలో బలమైన కనెక్షన్లను కొనసాగించవచ్చు.