#docker #dns #docker-swarm
#docker #dns #docker-swarm
Вопрос:
У меня есть 2 службы внутри моего кластера docker. frontend
выполняется на порту 8090
и backend
выполняется на порту 8000
. Как я могу сделать frontend
вызов backend
через локальный DNS, например fetch('https://backend.local/')
? Потому что, если я использую docker-hostname , мне нужно указать порт для вызова серверной части. Нужно ли мне иметь локальный DNS-сервер внутри моего docker?
Комментарии:
1. Из описания
docker
-tag: » … Вопросы о запуске docker в рабочей среде могут найти лучшие ответы на ServerFault ( serverfault.com ). … »2. Спасибо, я скопировал свой вопрос туда
3. Вы можете прочитать о создании сетей в Compose в документации Docker; в нем описывается, какие имена хостов будут доступны в обычной конфигурации. Однако также обратите внимание, что если ваш интерфейс представляет собой приложение React или Angular на основе браузера, любые вызовы HTTP-клиента будут поступать из браузера, а не из контейнера Docker, и вы не можете использовать здесь собственную сеть Docker.
4. Спасибо, что заметили это, но я использую SSR для интерфейса, так что это вообще не проблема
Ответ №1:
Вы должны создать программно-определяемую сеть (SDN) в docker, а затем все контейнеры, работающие в этой сети, могут взаимодействовать друг с другом, используя имена контейнеров, или вы можете определить псевдоним для каждого и использовать его. Простой файл docker-compose для серверного микросервиса и базы данных mysql можно создать, используя приведенные ниже конфигурации.
version: '3.2'
networks:
testNetwork:
services:
mysql-dev:
image: mysql:latest
container_name: mysql-dev
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=root
ports:
- "3306:3306"
networks:
- testNetwork
backend:
image: backend:1.0
container_name: backend
environment:
- DB_USER=root
- DB_PASS=root
- DB_NAME=root
- DB_HOST=mysql-dev
- DB_DIALECT=mysql
ports:
- "4000:4000"
working_dir: /backend
command: npm start
networks:
- testNetwork
Комментарии:
1. Ключевым моментом, который нужно искать в приведенном выше файле, является переменная DB_HOST env, которая используется серверной частью для соединения с базой данных.
2. Обратите внимание, что Compose создает сеть с вашим именем
default
, а имена служб можно использовать как имена хостов. Вам не нужно руководствоnetworks:
илиcontainer_name:
настройка.3. если я использую этот подход, мне все равно нужно определить порт, я пытаюсь решить, получить доступ к хосту без определения порта