Prístup k službám Localhost z kontajnerov Docker
Spustenie Nginx v kontajneri Docker pri potrebe pripojenia k inštancii MySQL na hostiteľskom počítači môže byť náročné, najmä ak je MySQL viazaný iba na localhost. Toto nastavenie zabraňuje kontajneru v priamom prístupe k službe MySQL pomocou štandardných sieťových metód.
Tento článok skúma rôzne riešenia na preklenutie tejto medzery, čo umožňuje bezproblémové pripojenie medzi kontajnermi Docker a službami bežiacimi na lokálnom hostiteľovi hostiteľa. Budeme diskutovať o tom, prečo môžu bežné metódy zaostávať, a poskytneme praktické kroky na dosiahnutie požadovanej konektivity.
Príkaz | Popis |
---|---|
docker network create --driver bridge hostnetwork | Vytvára vlastnú sieť Docker s ovládačom mosta, čo umožňuje kontajnerom komunikovať v rámci rovnakej siete. |
host_ip=$(ip -4 addr show docker0 | grep -oP '(? | Extrahuje IP adresu hostiteľského rozhrania docker0, ktoré sa používa na pripojenie z kontajnera k hostiteľským službám. |
docker exec -it nginx-container bash | Spustí interaktívny bash shell vo vnútri spusteného kontajnera Nginx pre priamy prístup z príkazového riadku. |
mysql -h $host_ip -u root -p | Príkaz používaný vo vnútri kontajnera Nginx na pripojenie k serveru MySQL bežiacemu na hostiteľskom počítači pomocou extrahovanej adresy IP. |
networks: hostnetwork: external: true | Konfigurácia v Docker Compose na použitie externe vytvorenej siete Docker. |
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 | Zapíše novú konfiguráciu Nginx na proxy požiadavky MySQL na hostiteľský počítač. |
nginx -s reload | Znova načíta službu Nginx, aby sa použili nové konfiguračné zmeny. |
Konfigurácia Docker a Nginx na prístup k hostiteľským službám
Ak chcete pripojiť kontajner Nginx k inštancii MySQL spustenej na hostiteľovi, musíme najprv vytvoriť sieťový most. Príkaz vytvára túto vlastnú sieť, ktorá umožňuje komunikáciu medzi kontajnermi v rovnakej sieti. Potom spustíme kontajnery MySQL a Nginx v tejto sieti pomocou a , resp. Toto nastavenie umožňuje kontajnerom objavovať sa a komunikovať medzi sebou. Na pripojenie k MySQL z Nginx potrebujeme IP adresu hostiteľa, ktorú je možné získať host_ip=$(ip -4 addr show docker0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}'). Tento príkaz zachytáva IP adresu rozhrania docker0 na hostiteľovi.
Ďalej používame na otvorenie interaktívneho shellu v kontajneri Nginx. Odtiaľ môžeme iniciovať pripojenie MySQL pomocou , kde je IP adresa hostiteľa. Prípadne použitie Docker Compose zjednoduší proces definovaním služieb a sietí v súbore YAML. The networks: hostnetwork: external: true konfigurácia zabezpečuje, že služby využívajú externe vytvorenú sieť. Nakoniec, aby sme nakonfigurovali Nginx na proxy požiadavky MySQL, aktualizujeme jeho konfiguračný súbor pomocou a znova načítajte Nginx pomocou . Toto nastavenie umožňuje Nginxu posielať požiadavky do inštancie MySQL spustenej na hostiteľovi.
Pripojenie kontajnera Docker k hostiteľovi MySQL cez sieťový most
Shell Script pre nastavenie siete Docker
# 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
Použitie Docker Compose na prepojenie Nginx a MySQL hostiteľa
Docker Compose YAML Configuration
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
Konfigurácia Nginx na pripojenie k hostiteľovi MySQL pomocou siete Docker
Konfigurácia Nginx a sieťový príkaz Docker
# 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
Pripojenie kontajnerov Docker na hosťovanie miestnych služieb
Pri spúšťaní aplikácií v kontajneroch Docker môže byť prístup k službám viazaným na lokálny hostiteľ hostiteľa náročný z dôvodu izolácie siete. Jedným z účinných prístupov je použitie režimu hostiteľskej siete Docker. Spustením kontajnera s Kontajner zdieľa sieťový zásobník hostiteľa, čo mu umožňuje priamy prístup k službám viazaným na lokálneho hostiteľa. Tento režim je však menej prenosný a nemusí fungovať dobre vo všetkých prostrediach, ako je napríklad Docker Swarm alebo Kubernetes.
Ďalším prístupom je použitie vstavaného DNS resolvera Dockera, . Tento špeciálny názov DNS sa prekladá na IP adresu hostiteľa, čo umožňuje kontajnerom komunikovať so službami na hostiteľovi. Táto metóda je jednoduchá a vyhýba sa zložitosti správy siete. Je však k dispozícii iba na Docker pre Windows a Mac, nie na Linuxe. Pre používateľov Linuxu je vytvorenie vlastnej premosťovacej siete a manuálna konfigurácia pravidiel smerovania životaschopným riešením. To zahŕňa použitie a príkazy na smerovanie prevádzky z kontajnerovej siete do hostiteľského rozhrania localhost.
Bežné otázky týkajúce sa pripojenia kontajnerov Docker k hostiteľským službám
- Ako môžem použiť možnosť v Dockeri?
- Spustite svoj kontajner pomocou zdieľať sieťový zásobník hostiteľa.
- Čo je ?
- Je to špeciálny názov DNS, ktorý sa priraďuje k IP adrese hostiteľa a je k dispozícii na Docker pre Windows a Mac.
- Môžem použiť na Linuxe?
- Nie, táto funkcia nie je dostupná v Docker pre Linux.
- Ako môžem vytvoriť vlastnú premosťovaciu sieť?
- Použite na vytvorenie vlastnej siete mostov.
- Aký je účel príkaz?
- Spravuje pravidlá filtrovania sieťových paketov a smerovania na systémoch Linux.
- Ako sa pripojím k inštancii MySQL na hostiteľovi z kontajnera Docker?
- Použite pre Docker na Windows/Mac alebo nakonfigurujte smerovanie pre Linux.
- Aké sú obmedzenia používania ?
- Môže to znížiť prenosnosť a nie je kompatibilné s niektorými orchestrátormi, ako je Kubernetes.
- Môžem pristupovať k iným službám na hostiteľovi okrem MySQL?
- Áno, pomocou rovnakých metód sa môžete pripojiť k akejkoľvek službe spustenej na hostiteľovi.
Záverečné myšlienky o prístupe k hostiteľským službám od Docker
Pripojenie k inštancii MySQL na hostiteľovi z kontajnera Nginx zahŕňa rôzne metódy, z ktorých každá má svoje výhody a obmedzenia. Použitie hostiteľskej siete, špeciálnych názvov DNS alebo vlastných sieťových mostov môže efektívne preklenúť medzeru a zabezpečiť hladkú komunikáciu medzi kontajnermi Docker a hostiteľskými službami. Pochopením a implementáciou týchto stratégií môžete prekonať problémy s izoláciou siete a udržiavať robustné pripojenia vo svojom dockerizovanom prostredí.