Ваши контейнеры всегда имеют доступ к вашему хост-компьютеру.
В Linux вы можете просто использовать адрес шлюза по умолчанию внутри контейнера;это будет адрес моста на вашем хосте, к которому подключен ваш контейнер.Все хост-службы, которые прослушивают все интерфейсы, будут доступны по этому адресу.Предполагая, что в вашем контейнере установлен пакет iproute
, вы можете получить адрес шлюза, используя что-то вроде:
ip route | awk '$1 == "default" {print $3}'
Конечно, вы можете использовать адрес любого интерфейса хоста и передать его в качестве переменной среды (docker run -e HOSTADDR=192.168.23.5 ...
);использование адреса шлюза удобно, поскольку его можно обнаружить изнутри контейнера.
В Docker для MacOS или Docker для Windows вы можете использовать специальное имя хоста host.docker.internal
для ссылки на хост, как описано, например, здесь .
Обратите внимание, что если ваша хост-служба не прослушивает все интерфейсы или если у вас ограниченная конфигурация брандмауэра, вам может потребоваться внести изменения, прежде чем сработает вышеперечисленное.