Что такое 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> ...