Локальная связь между службами

#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. если я использую этот подход, мне все равно нужно определить порт, я пытаюсь решить, получить доступ к хосту без определения порта