Выбор ответа Middle Сети и тома обновлено

Обращение из контейнера к хосту

Вопрос

Приложение в контейнере на Linux должно обратиться к сервису, который слушает порт на самом хосте. Как это сделать корректно?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: --add-host=host.docker.internal:host-gateway и обращаться к этому имени. localhost в контейнере это сам контейнер.

Варианты ответа

  1. Обращаться к localhost: в Linux контейнер делит loopback с хостом
  2. Никак: bridge-сеть изолирует контейнер от процессов хоста полностью
  3. --add-host=host.docker.internal:host-gateway и обращаться к этому имениправильный ответ
  4. Запустить сервис хоста в том же образе вторым процессом (supervisord)

Разбор

localhost в контейнере это сам контейнер. Специальное значение host-gateway подставляет адрес шлюза bridge-сети, то есть хоста. В Docker Desktop имя host.docker.internal есть из коробки. Сервис на хосте при этом должен слушать не только 127.0.0.1. Альтернатива: --network host, но с потерей изоляции.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.