Альтернатива Docker хосту --network в macOS и Windows

У меня есть два док-контейнера:

  • база данных
  • приложение, которое потребляет базу данных

Я запускаю свой контейнер базы данных следующим образом:

docker run --name my-db -p 127.0.0.1:3306:3306 my-db-image

И мой контейнер приложений выглядит так:

docker run --name my-app --network host -it my-app-image

Это прекрасно работает на Linux. Я могу получить доступ к БД как из хост-системы, так и из контейнера приложения. Отлично.

тем не мение --network host не работает на Mac и Windows:

Сетевой драйвер хоста работает только на хостах Linux и не поддерживается в Docker для Mac, Docker для Windows или Docker EE для Windows Server.

(источник: https://docs.docker.com/network/host/)

Я все еще могу получить доступ к базе данных через 127.0.0.1:3306 с основного хоста, но я не могу получить к нему доступ из контейнера приложения.

Как я могу решить эту проблему? Как я могу позволить контейнеру приложения соединяться с базой данных (и продолжать получать доступ к БД с основного хоста, используя 127.0.0.1:3306)?

Я пытался использовать host.docker.internal а также gateway.docker.internal но это не работает

Я также попытался запустить оба контейнера, используя --network my-network после создания my-network с docker network create my-network но это не работает

Я не могу понять, как решить эту проблему.

1 ответ

Решение

Для нескольких служб зачастую проще создать файл docker-compose.yml, который запустит все службы и любые сети, необходимые для их подключения.

version: '3'
services:
  my-db:
    image: my-db-image
    ports:
      - "3306:3306"
    networks:
      - mynetwork

  my-app:
    image: my-app-image
    ports:
      - "8000:80"
    networks:
      - mynetwork

networks:
  mynetwork:

Из папки проекта вы запускаете docker-compose up или же docker-compose up -d чтобы службы работали в фоновом режиме.

В этом сценарии магия Docker предоставляет сеть с именем хоста "mynetwork". Он должен предоставлять порты по умолчанию другим службам в этой сети. Если вы хотите переназначить порты, шаблон target:source.

Я не знаю, что вам нужно конфигурации "портов" здесь. Но я пытаюсь сопоставить ваш конфиг с файлом композиции. Также я предполагаю, что вам нужно выставить приложение на некоторый порт; используя 8000, так как это довольно распространенная установка.

Какие параметры здесь? Docker-составить ссылку

Другие вопросы по тегам