Nginxi ühendamine Dockeris hostmasinas Localhost MySQL-iga

Nginxi ühendamine Dockeris hostmasinas Localhost MySQL-iga
Shell

Juurdepääs Localhosti teenustele Dockeri konteineritest

Nginxi käivitamine Dockeri konteineris, samal ajal kui peate hostmasinas MySQL-i eksemplariga ühenduse looma, võib olla keeruline, eriti kui MySQL on seotud ainult kohaliku hostiga. See seadistus takistab konteineril standardsete võrgumeetodite abil otse MySQL-teenusele juurdepääsu.

See artikkel uurib erinevaid lahendusi selle lünga ületamiseks, võimaldades Dockeri konteinerite ja hosti lokaalses hostis töötavate teenuste vahel sujuvat ühendust. Arutame, miks levinud meetodid võivad osutuda puudulikuks, ja pakume praktilisi samme soovitud ühenduvuse saavutamiseks.

Käsk Kirjeldus
docker network create --driver bridge hostnetwork Loob kohandatud Dockeri võrgu silddraiveriga, võimaldades konteineritel suhelda samas võrgus.
host_ip=$(ip -4 addr show docker0 | grep -oP '(? Eraldab hosti docker0 liidese IP-aadressi, mida kasutatakse konteinerist hostiteenustega ühenduse loomiseks.
docker exec -it nginx-container bash Käivitab töötavas Nginxi konteineris interaktiivse bash-shelli otseseks käsureajuurdepääsuks.
mysql -h $host_ip -u root -p Nginxi konteineris kasutatav käsk hostmasinas töötava MySQL-serveriga ühendamiseks eraldatud IP-aadressi abil.
networks: hostnetwork: external: true Docker Compose'i konfiguratsioon väliselt loodud Dockeri võrgu kasutamiseks.
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 Kirjutab uue Nginxi konfiguratsiooni MySQL-i päringute puhverserveriks hostmasinasse.
nginx -s reload Laadib Nginxi teenuse uuesti, et rakendada uusi konfiguratsioonimuudatusi.

Dockeri ja Nginxi konfigureerimine hostteenustele juurdepääsuks

Nginxi konteineri ühendamiseks hostis töötava MySQL-i eksemplariga peame esmalt looma võrgusilla. Käsk docker network create --driver bridge hostnetwork loob selle kohandatud võrgu, võimaldades suhtlust sama võrgu konteinerite vahel. Seejärel käivitame selles võrgus MySQL-i ja Nginxi konteinerid, kasutades docker run --name mysql-container --network hostnetwork -e MYSQL_ROOT_PASSWORD=root -d mysql:latest ja docker run --name nginx-container --network hostnetwork -d nginx:latest, vastavalt. See seadistus võimaldab konteineritel üksteist avastada ja nendega suhelda. Nginxi kaudu MySQL-iga ühenduse loomiseks vajame hosti IP-aadressi, mille saab hankida host_ip=$(ip -4 addr show docker0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}'). See käsk jäädvustab hosti docker0 liidese IP-aadressi.

Järgmisena kasutame docker exec -it nginx-container bash interaktiivse kesta avamiseks Nginxi konteineris. Siit saame MySQL-i ühenduse luua kasutades mysql -h $host_ip -u root -p, kus $host_ip on hosti IP-aadress. Teise võimalusena lihtsustab Docker Compose'i kasutamine protsessi, määratledes teenused ja võrgud YAML-failis. The networks: hostnetwork: external: true konfiguratsioon tagab, et teenused kasutavad väliselt loodud võrku. Lõpuks värskendame Nginxi konfigureerimiseks MySQL-i taotlusi puhverserveriks selle konfiguratsioonifaili echo "server { listen 80; location / { proxy_pass http://host.docker.internal:3306; } }" > /etc/nginx/conf.d/default.conf ja laadige Nginx uuesti kasutades nginx -s reload. See seadistus võimaldab Nginxil päringuid hostis töötavale MySQL-i eksemplarile edastada.

Docker Containeri ühendamine hosti MySQL-iga Network Bridge kaudu

Shell Script Dockeri võrgu seadistamiseks

# 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

Docker Compose'i kasutamine Nginxi ja hosti MySQL-i linkimiseks

Docker Compose YAML konfiguratsioon

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

Nginxi konfigureerimine MySQL-i hostiga ühenduse loomiseks Dockeri võrgu abil

Nginxi konfiguratsioon ja Dockeri võrgukäsk

# 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

Dockeri konteinerite ühendamine kohalike teenustega

Rakenduste käivitamisel Dockeri konteinerites võib hosti kohaliku hostiga seotud teenustele juurdepääs olla võrgu isolatsiooni tõttu keeruline. Üks tõhus viis on kasutada Dockeri hostivõrgu režiimi. Alustades konteinerit koos --network host Võimaluse korral jagab konteiner hosti võrgupinu, võimaldades tal otse juurde pääseda kohaliku hostiga seotud teenustele. See režiim on aga vähem kaasaskantav ja ei pruugi kõigis keskkondades, nagu Docker Swarm või Kubernetes, hästi töötada.

Teine võimalus on kasutada Dockeri sisseehitatud DNS-i lahendajat, host.docker.internal. See spetsiaalne DNS-nimi määratakse hosti IP-aadressiks, võimaldades konteineritel suhelda hosti teenustega. See meetod on lihtne ja väldib võrguhalduse keerukust. Kuid see on saadaval ainult Windowsi ja Maci Dockeris, mitte Linuxis. Linuxi kasutajate jaoks on kohandatud sillavõrgu loomine ja marsruutimisreeglite käsitsi konfigureerimine elujõuline lahendus. See hõlmab ip ja iptables käsud liikluse suunamiseks konteinervõrgust hosti kohaliku hosti liidesesse.

Levinud küsimused Dockeri konteinerite ühendamise kohta hostteenustega

  1. Kuidas ma kasutan --network host valik Dockeris?
  2. Käitage oma konteinerit docker run --network host hosti võrgupinu jagamiseks.
  3. Mis on host.docker.internal?
  4. See on spetsiaalne DNS-nimi, mis lahendab hosti IP-aadressi ja on saadaval Dockeri Windowsi ja Maci jaoks.
  5. Kas ma võin kasutada host.docker.internal Linuxis?
  6. Ei, see funktsioon pole Dockeri jaoks Linuxi jaoks saadaval.
  7. Kuidas luua kohandatud sillavõrku?
  8. Kasuta docker network create --driver bridge my-bridge-network kohandatud sillavõrgu loomiseks.
  9. Mis on eesmärk iptables käsk?
  10. See haldab Linuxi süsteemides võrgupakettide filtreerimise ja marsruutimise reegleid.
  11. Kuidas luua Dockeri konteinerist ühendus hosti MySQL-i eksemplariga?
  12. Kasuta mysql -h host.docker.internal -u root -p Dockeri jaoks Windowsis/Macis või konfigureerige marsruutimine Linuxi jaoks.
  13. Millised on kasutamise piirangud --network host?
  14. See võib kaasaskantavust vähendada ja ei ühildu mõne orkestraatoriga, nagu Kubernetes.
  15. Kas ma saan lisaks MySQL-ile juurde pääseda ka teistele hostiteenustele?
  16. Jah, samu meetodeid kasutades saate ühenduse luua mis tahes hostis töötava teenusega.

Viimased mõtted Dockeri hostiteenustele juurdepääsu kohta

Nginxi konteinerist hostis oleva MySQL-i eksemplariga ühenduse loomine hõlmab erinevaid meetodeid, millest igaühel on oma eelised ja piirangud. Hostivõrgu, spetsiaalsete DNS-nimede või kohandatud võrgusildade kasutamine võib lõhe tõhusalt ületada, tagades sujuva suhtluse Dockeri konteinerite ja hostiteenuste vahel. Nende strateegiate mõistmisel ja rakendamisel saate ületada võrgu isoleerimisega seotud väljakutsed ja säilitada tugevaid ühendusi oma Dockeriseeritud keskkonnas.