Если у меня есть база данных mysql, запущенная на каком-то хост-компьютере, и на этом хосте также работает контейнер докеров: как мне получить доступ к базе данных mysql из контейнера докеров, который работает на хосте?
Например, есть ли способ опубликовать порт хостов в контейнере (обратный тому, что делает docker run -p)?
Ответы:
Существует несколько давних дискуссий о том, как сделать это последовательным, понятным и переносимым способом. Нет полного решения, но я свяжу вас с обсуждениями ниже.
В любом случае вы многие захотите попробовать использовать параметр --add-host для docker run, чтобы добавить IP-адрес хоста в файл / etc / host контейнера. Отсюда легко подключиться к хосту через любой требуемый порт:
Документация:
https://docs.docker.com/engine/reference/commandline/run/
Обсуждения доступа к хосту из контейнера:
https://github.com/docker/docker/issues/1143
https://github.com/docker/docker/issues/10023
источник
Из документов 18.03:
ПРИМЕР: Вот что я использую для строки подключения MySQL внутри моего контейнера для доступа к экземпляру MySQL на моем хосте:
источник
Начиная с Docker 17.06 и далее в контейнерах докеров доступно специальное DNS-имя только для Mac, которое разрешается в IP-адрес хоста. Это:
docker.for.mac.localhost
Документация находится здесь: https://docs.docker.com/docker-for-mac/networking/#httphttps-proxy-support
источник
docker.for.mac.host.internal
начиная с этогоDocker 17.12.0 ce
момента. docs.docker.com/docker-for-mac/release-notes/…docker.for.mac.localhost
работает18.03.1-ce-mac65
Используйте host.docker.internal начиная с Docker 18.03.
источник
Docker version 18.03.0-ce, build 0520e24
18.03.1-ce-mac65
Другие ответы мне не подошли. Мой контейнер не смог разрешить IP- адрес хоста с помощью host.docker.internal . Есть два пути
Совместное использование хост-сети --net = host:
Используя IP-адрес докера, обычно это 172.17.0.1 . Вы можете проверить это, вызвав команду ifconfig и взяв inet addr интерфейса докера.
Как только у вас есть этот IP-адрес, вы можете передать его в качестве аргумента для запуска докера, а затем в приложение или, как я, сопоставить местоположение jdbc.properties через том с каталогом на хост-машине, чтобы вы могли управлять файлом извне ,
ПРИМЕЧАНИЕ. Ваша база данных может не разрешать внешние подключения. В случае postgresql вам нужно отредактировать 2 файла, как описано здесь и здесь :
Отредактируйте postgresql.conf, чтобы прослушивать все адреса. По умолчанию он будет указывать на localhost.
Отредактируйте pg_hba.conf, чтобы разрешить соединения со всех адресов. Добавьте в последнюю строку:
ВАЖНО: Последний шаг обновления доступа к базе данных не рекомендуется для производственного использования, если вы действительно не уверены, что делаете.
источник