Альтернатива Docker хосту --network в macOS и Windows - PullRequest
0 голосов
/ 13 января 2019

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

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

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

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 Ответ

0 голосов
/ 13 января 2019

Для нескольких служб зачастую проще создать файл 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.

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

Какие параметры здесь? Справочник по составлению Docker

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...