Сеть по умолчанию в docker-контейнере представляет собой мост (в той же локальной сети, что и хост, но с отдельным локальным IP), когда программа работает в производственной среде, достаточно настроить соответствующий сервисный адрес для подключения к базе данных, redis и т.д.
В среде разработки, если сервис работает в docker, а база данных работает локально, настройка 127.0.0.1 непроста.
Это можно решить двумя способами.
Решение 1:
Рассматривайте хост-машину и контейнер как две отдельные машины, а при настройке адреса настраивайте локальный или публичный IP хоста.
Решение 2:
Но напишите адрес хоста напрямую как: host.docker.internal, однако.Второй способ требует версии docker выше 18.03 и должен быть доступен на Windows и Mac。
Чтобы проверить, могут ли эти два метода получить доступ к хосту, можно напрямую запустить образ с помощью docker, чтобы пинговать командную строку:
Как видно на изображении выше, доступ к контейнерамhost.docker.internalВы можете получить доступ к сервису хоста, проверив файл /etc/hosts, вы обнаружите, что перенаправление доменного имени нет, и вы не знаете конкретного принципа docker.
И хост, и контейнер могут получить доступ к сервисам хоста через host.docker.internal, но адрес, возвращаемый командой ping, отличается следующим образом:
|