Что такое linux-эквивалент "docker.for.mac.host.internal"
В Mac и Windows можно использовать docker.for.mac.host.internal
(заменяет docker.for.mac.localhost
) и docker.for.win.host.internal
(заменяет docker.for.win.localhost
) host.docker.internal
(Docker 18. 03+) внутри контейнера.
Есть ли один для Linux, который будет работать "из коробки", не передавая переменные env или извлекая его с помощью различных команд cli.
Ответы
Ответ 1
Зависит от того, что вы пытаетесь сделать. Если вы работаете с --net=host
, localhost
должен работать нормально. Если вы используете сетевую настройку по умолчанию, используйте статический IP 172.17.0.1
. Я подозреваю, что ни один из них не будет вести себя так же, как эти домены.
Ответ 2
Одним из решений является использование специального контейнера, который перенаправляет трафик на хост. Вы можете найти такой контейнер здесь: https://github.com/qoomon/docker-host. Идея состоит в том, чтобы получить маршрут по умолчанию изнутри контейнера и установить его в качестве шлюза NAT для входящих соединений.
Ниже воображаемый пример использования:
docker-host:
image: qoomon/docker-host
cap_add: [ 'NET_ADMIN', 'NET_RAW' ]
restart: on-failure
environment:
- PORTS=999
some-service:
image: ...
environment:
SERVER_URL: "http://docker-host:999"
command: ...
depends_on:
- docker-host
Ответ 3
Для Linux нет DNS-имени по умолчанию для хоста. Это можно проверить, выполнив команду:
docker run -it alpine cat /etc/hosts
Эта функция была запрошена, но не была реализована. Вы можете проверить эту проблему. Как уже говорилось, вы можете использовать следующую команду, чтобы найти IP-адрес хоста из контейнера.
netstat -nr | grep '^0\.0\.0\.0' | awk '{print $2}'
В качестве альтернативы, вы можете указать IP-адрес хоста для команды запуска через docker run --add-host dockerHost:<ip-address> ...