Повезивање Нгинк-а у Доцкер-у са Лоцалхост МиСКЛ-ом на Хост Мацхине-у

Повезивање Нгинк-а у Доцкер-у са Лоцалхост МиСКЛ-ом на Хост Мацхине-у
Shell

Приступ Лоцалхост услугама из Доцкер контејнера

Покретање Нгинк-а унутар Доцкер контејнера док је потребно да се повежете са МиСКЛ инстанцом на хост машини може бити изазов, посебно када је МиСКЛ везан само за лоцалхост. Ово подешавање спречава да контејнер директно приступи МиСКЛ сервису користећи стандардне методе умрежавања.

Овај чланак истражује различита решења за премошћавање овог јаза, омогућавајући беспрекорну повезаност између Доцкер контејнера и услуга које раде на локалном хосту хоста. Разговараћемо о томе зашто уобичајене методе могу бити недостатке и обезбедити практичне кораке за постизање жељене повезаности.

Цомманд Опис
docker network create --driver bridge hostnetwork Креира прилагођену Доцкер мрежу са бридге драјвером, омогућавајући контејнерима да комуницирају унутар исте мреже.
host_ip=$(ip -4 addr show docker0 | grep -oP '(? Извлачи ИП адресу хостовог доцкер0 интерфејса, који се користи за повезивање из контејнера са услугама хоста.
docker exec -it nginx-container bash Извршава интерактивну басх шкољку унутар покренутог Нгинк контејнера за директан приступ командној линији.
mysql -h $host_ip -u root -p Команда која се користи унутар Нгинк контејнера за повезивање са МиСКЛ сервером који ради на хост машини користећи екстраховану ИП адресу.
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 Пише нову Нгинк конфигурацију за прокси МиСКЛ захтеве на хост машину.
nginx -s reload Поново учитава Нгинк услугу да примени нове промене конфигурације.

Конфигурисање Доцкер-а и Нгинк-а за приступ услугама хоста

Да бисмо повезали Нгинк контејнер са МиСКЛ инстанцом која ради на хосту, прво морамо да успоставимо мрежни мост. Команда docker network create --driver bridge hostnetwork креира ову прилагођену мрежу, омогућавајући комуникацију између контејнера на истој мрежи. Затим покрећемо МиСКЛ и Нгинк контејнере на овој мрежи користећи 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, редом. Ово подешавање омогућава контејнерима да откривају и комуницирају једни са другима. Да бисмо се повезали на МиСКЛ из Нгинк-а, потребна нам је ИП адреса домаћина, која се може добити помоћу host_ip=$(ip -4 addr show docker0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}'). Ова команда снима ИП адресу интерфејса доцкер0 на хосту.

Следеће, користимо docker exec -it nginx-container bash да отворите интерактивну шкољку у Нгинк контејнеру. Одавде можемо покренути МиСКЛ везу користећи mysql -h $host_ip -u root -p, где $host_ip је ИП адреса домаћина. Алтернативно, коришћење Доцкер Цомпосе поједностављује процес дефинисањем услуга и мрежа у ИАМЛ датотеци. Тхе networks: hostnetwork: external: true конфигурација осигурава да услуге користе мрежу креирану споља. Коначно, да бисмо конфигурисали Нгинк за прокси МиСКЛ захтеве, ажурирамо његову конфигурациону датотеку са echo "server { listen 80; location / { proxy_pass http://host.docker.internal:3306; } }" > /etc/nginx/conf.d/default.conf и поново учитајте Нгинк користећи nginx -s reload. Ово подешавање омогућава Нгинк-у да прослеђује захтеве МиСКЛ инстанци која ради на хосту.

Повезивање Доцкер контејнера са МиСКЛ хостом преко мрежног моста

Схелл Сцрипт за подешавање мреже Доцкер

# 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

Коришћење Доцкер Цомпосе за повезивање Нгинк-а и МиСКЛ-а хоста

Доцкер Цомпосе ИАМЛ конфигурација

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

Конфигурисање Нгинк-а за повезивање са хостом МиСКЛ помоћу Доцкер мреже

Нгинк конфигурација и Доцкер мрежна команда

# 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 опција, контејнер дели мрежни стек домаћина, омогућавајући му директан приступ услугама везаним за локални хост. Међутим, овај режим је мање преносив и можда неће добро функционисати у свим окружењима, као што су Доцкер Сварм или Кубернетес.

Други приступ је коришћење Доцкер-овог уграђеног ДНС разрешивача, host.docker.internal. Ово специјално ДНС име се решава у ИП адресу домаћина, омогућавајући контејнерима да комуницирају са услугама на хосту. Овај метод је једноставан и избегава сложеност управљања мрежом. Међутим, доступан је само на Доцкер-у за Виндовс и Мац, не и на Линук-у. За кориснике Линук-а, стварање прилагођене мреже за премошћивање и ручно конфигурисање правила рутирања је одрживо решење. Ово укључује коришћење ip и iptables команде за усмеравање саобраћаја из мреже контејнера до локалног интерфејса хоста.

Уобичајена питања о повезивању Доцкер контејнера са услугама хоста

  1. Како да користим --network host опција у Доцкер-у?
  2. Покрените свој контејнер са docker run --network host да делите мрежни стог домаћина.
  3. Шта је host.docker.internal?
  4. То је посебно ДНС име које се решава у ИП адресу домаћина, доступно на Доцкер-у за Виндовс и Мац.
  5. Могу ли да користим host.docker.internal на Линуку?
  6. Не, ова функција није доступна у Доцкер-у за Линук.
  7. Како могу да направим прилагођену мрежу мостова?
  8. Користите docker network create --driver bridge my-bridge-network за креирање прилагођене мреже мостова.
  9. Која је сврха iptables команда?
  10. Управља филтрирањем мрежних пакета и правилима рутирања на Линук системима.
  11. Како да се повежем са МиСКЛ инстанцом на хосту из Доцкер контејнера?
  12. Користи mysql -h host.docker.internal -u root -p за Доцкер на Виндовс/Мац-у или конфигуришите рутирање за Линук.
  13. Која су ограничења употребе --network host?
  14. Може да смањи преносивост и није компатибилан са неким оркестраторима као што је Кубернетес.
  15. Могу ли приступити другим услугама на хосту осим МиСКЛ-а?
  16. Да, користећи исте методе, можете се повезати на било коју услугу која ради на хосту.

Завршна размишљања о приступу услугама хоста из Доцкер-а

Повезивање са МиСКЛ инстанцом на хосту из Нгинк контејнера укључује различите методе, од којих свака има своје предности и ограничења. Коришћење мреже хоста, специјалних ДНС имена или прилагођених мрежних мостова може ефикасно премостити јаз, обезбеђујући несметану комуникацију између Доцкер контејнера и хост услуга. Разумевањем и применом ових стратегија, можете превазићи изазове мрежне изолације и одржавати робусне везе у вашем Доцкеризед окружењу.