Альтернатива 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-составить ссылку