У меня есть два докер-контейнера:
- база данных
- приложение, которое потребляет базу данных
Я запускаю свой контейнер базы данных следующим образом:
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
, но это не сработало.
Не могу понять, как решить эту проблему.
docker network create my-network
должен работать, пока вы обращаетесь к контейнеру db по имени из контейнера приложения (my-db:3306
). - person Paul   schedule 13.01.2019--network host
. Так что я приму твой ответ, так как это правильное решение в общем случае. - person Francesco Borzi   schedule 13.01.2019