Nginx csatlakoztatása a Dockerben a Localhost MySQL-hez a gazdagépen

Nginx csatlakoztatása a Dockerben a Localhost MySQL-hez a gazdagépen
Shell

A Localhost szolgáltatások elérése a Docker-tárolókból

Az Nginx futtatása egy Docker-tárolóban, miközben egy MySQL-példányhoz kell csatlakozni a gazdagépen, kihívást jelenthet, különösen akkor, ha a MySQL csak a localhosthoz van kötve. Ez a beállítás megakadályozza, hogy a tároló közvetlenül hozzáférjen a MySQL szolgáltatáshoz szabványos hálózati módszerekkel.

Ez a cikk különféle megoldásokat tár fel ennek a szakadéknak az áthidalására, lehetővé téve a zökkenőmentes kapcsolatot a Docker-tárolók és a gazdagép localhost-ján futó szolgáltatások között. Megvitatjuk, hogy a gyakori módszerek miért maradnak el, és gyakorlati lépéseket teszünk a kívánt kapcsolat eléréséhez.

Parancs Leírás
docker network create --driver bridge hostnetwork Egyéni Docker-hálózatot hoz létre egy híd-illesztőprogrammal, lehetővé téve a konténerek számára, hogy ugyanazon a hálózaton belül kommunikáljanak.
host_ip=$(ip -4 addr show docker0 | grep -oP '(? Kivonja a gazdagép docker0 interfészének IP-címét, amely a konténer és a gazdagép szolgáltatások közötti csatlakozásra szolgál.
docker exec -it nginx-container bash Interaktív bash shellt hajt végre a futó Nginx tárolóban a közvetlen parancssori hozzáférés érdekében.
mysql -h $host_ip -u root -p Az Nginx-tárolón belüli parancs a gazdagépen futó MySQL-kiszolgálóhoz való csatlakozáshoz a kibontott IP-cím használatával.
networks: hostnetwork: external: true A Docker Compose beállítása külsőleg létrehozott Docker-hálózat használatához.
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 Új Nginx-konfigurációt ír a MySQL kérések proxyjához a gazdagéphez.
nginx -s reload Újratölti az Nginx szolgáltatást az új konfigurációs módosítások alkalmazásához.

A Docker és az Nginx konfigurálása a gazdagép szolgáltatások eléréséhez

Egy Nginx-tároló csatlakoztatásához a gazdagépen futó MySQL-példányhoz először hálózati hidat kell létrehoznunk. A parancs docker network create --driver bridge hostnetwork létrehozza ezt az egyéni hálózatot, lehetővé téve a kommunikációt ugyanazon a hálózaton lévő tárolók között. Ezután elindítjuk a MySQL és Nginx konténereket ezen a hálózaton docker run --name mysql-container --network hostnetwork -e MYSQL_ROOT_PASSWORD=root -d mysql:latest és docker run --name nginx-container --network hostnetwork -d nginx:latest, ill. Ez a beállítás lehetővé teszi, hogy a konténerek felfedezzék és kommunikáljanak egymással. A MySQL-hez való csatlakozáshoz az Nginx-ről szükségünk van a gazdagép IP-címére, amelyet a következővel lehet megszerezni host_ip=$(ip -4 addr show docker0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}'). Ez a parancs rögzíti a docker0 interfész IP-címét a gazdagépen.

Ezután használjuk docker exec -it nginx-container bash interaktív héj megnyitásához az Nginx tárolóban. Innentől MySQL kapcsolatot kezdeményezhetünk a használatával mysql -h $host_ip -u root -p, ahol $host_ip a gazdagép IP-címe. Alternatív megoldásként a Docker Compose használata leegyszerűsíti a folyamatot a szolgáltatások és hálózatok YAML-fájlban történő meghatározásával. A networks: hostnetwork: external: true A konfiguráció biztosítja, hogy a szolgáltatások külsőleg létrehozott hálózatot használjanak. Végül, hogy az Nginxet a MySQL kérések proxyjára állítsuk be, frissítjük a konfigurációs fájlját a következővel echo "server { listen 80; location / { proxy_pass http://host.docker.internal:3306; } }" > /etc/nginx/conf.d/default.conf és töltse be újra az Nginxet a használatával nginx -s reload. Ez a beállítás lehetővé teszi, hogy az Nginx kéréseket továbbítson a gazdagépen futó MySQL-példányhoz.

Docker Container csatlakoztatása a Host MySQL-hez a Network Bridge segítségével

Shell Script a Docker hálózati beállításhoz

# 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

A Docker Compose használata az Nginx és a Host MySQL összekapcsolásához

Docker Compose YAML konfiguráció

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

Az Nginx konfigurálása a MySQL gazdagéphez való csatlakozáshoz Docker Network használatával

Nginx Configuration és Docker Network Command

# 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

Docker-tárolók csatlakoztatása a helyi szolgáltatásokhoz

Amikor az alkalmazásokat Docker-tárolókban futtatja, a gazdagép helyi gazdagépéhez kötött szolgáltatások elérése kihívást jelenthet a hálózati elszigeteltség miatt. Az egyik hatékony módszer a Docker gazdagép hálózati módjának használata. Egy konténer elindításával a --network host opció esetén a tároló megosztja a gazdagép hálózati veremét, lehetővé téve számára, hogy közvetlenül hozzáférjen a helyi gazdagéphez kötött szolgáltatásokhoz. Ez a mód azonban kevésbé hordozható, és előfordulhat, hogy nem működik jól minden környezetben, például a Docker Swarmban vagy a Kubernetesben.

Egy másik megközelítés a Docker beépített DNS-feloldójának használata, host.docker.internal. Ez a speciális DNS-név a gazdagép IP-címét adja meg, lehetővé téve a konténerek számára, hogy kommunikáljanak a gazdagépen található szolgáltatásokkal. Ez a módszer egyszerű, és elkerüli a hálózatkezelés bonyolultságát. Azonban csak a Docker for Windows és Mac rendszeren érhető el, Linuxon nem. A Linux-felhasználók számára életképes megoldás az egyéni hídhálózat létrehozása és az útválasztási szabályok kézi konfigurálása. Ez magában foglalja a ip és iptables parancsok, amelyek a forgalmat a tárolóhálózatból a gazdagép localhost felületére irányítják.

Gyakori kérdések a Docker-tárolók csatlakoztatásával kapcsolatban a gazdagép szolgáltatásokhoz

  1. Hogyan használom a --network host opció a Dockerben?
  2. Futtassa a tárolót ezzel docker run --network host a gazdagép hálózati veremének megosztásához.
  3. Mi a host.docker.internal?
  4. Ez egy speciális DNS-név, amely a gazdagép IP-címét adja meg, és elérhető a Docker for Windows és Mac rendszeren.
  5. Használhatom host.docker.internal Linuxon?
  6. Nem, ez a funkció nem érhető el a Docker for Linux rendszeren.
  7. Hogyan hozhatok létre egyéni hídhálózatot?
  8. Használat docker network create --driver bridge my-bridge-network egyéni hídhálózat létrehozásához.
  9. Mi a célja a iptables parancs?
  10. Ez kezeli a hálózati csomagszűrést és az útválasztási szabályokat Linux rendszereken.
  11. Hogyan csatlakozhatok egy MySQL-példányhoz a gazdagépen egy Docker-tárolóból?
  12. Használat mysql -h host.docker.internal -u root -p Dockerhez Windows/Mac rendszeren, vagy konfigurálja az útválasztást Linuxhoz.
  13. Milyen korlátai vannak a használatnak --network host?
  14. Csökkentheti a hordozhatóságot, és nem kompatibilis néhány hangszerelővel, mint például a Kubernetes.
  15. Hozzáférhetek más szolgáltatásokhoz a gazdagépen a MySQL-n kívül?
  16. Igen, ugyanezekkel a módszerekkel csatlakozhat a gazdagépen futó bármely szolgáltatáshoz.

Utolsó gondolatok a gazdaszolgáltatások Dockerből való elérésével kapcsolatban

Az Nginx-tárolóból a gazdagépen található MySQL-példányhoz való csatlakozás különféle módszereket foglal magában, mindegyiknek megvannak a maga előnyei és korlátai. A gazdagép-hálózatok, a speciális DNS-nevek vagy az egyéni hálózati hidak használatával hatékonyan áthidalható a szakadék, biztosítva a zökkenőmentes kommunikációt a Docker-tárolók és a gazdagép-szolgáltatások között. Ezen stratégiák megértésével és megvalósításával legyőzheti a hálózat elszigetelésével kapcsolatos kihívásokat, és robusztus kapcsolatokat tarthat fenn Dockerizált környezetben.