Docker контейнер отправляет запрос на http - PullRequest
0 голосов
/ 25 мая 2020

Привет, у меня вопрос.

Я использую docker compose ver3 и образ консула в качестве контейнера, на моем хост-компьютере у меня есть простая служба, которая должна отвечать на HTTP-запрос, и она настроена на порт 40001. Итак, теперь я хочу сделать docker отправлять запросы к этой службе в качестве проверки работоспособности через http (другими словами, отправлять запрос из контейнера docker службе, работающей на хосте).

Моя docker написать для консула просто:

version: '3'

services:

  consul:
  image: consul:latest
  command: consul agent -dev -log-level=warning -ui -client=0.0.0.0
  hostname: consul
  container_name: consul
  ports:
    - 8500:8500
    - 8600:8600/udp
    - 40000-41000:40000-41000

Итак, я запускаю этот контейнер, служба на хосте регистрируется внутри него с адресом проверки работоспособности http для службы на хосте с " http://localhost: 40005 // Здоровье". Интервал для запроса составляет около 15 секунд, поэтому я ожидаю, что такой запрос поступит в службу, и служба ответит с 200.

Также у меня есть доступ к пользовательскому интерфейсу для консула в контейнере.

Ну служба на хосте не регистрирует никаких входящих запросов, но интересно то, что когда я запускаю автономный консул, он работает нормально (то есть я получаю проверки работоспособности).

Итак, мой вопрос, может ли это быть проблемой, что контейнер не может связаться со службой на хосте.

1 Ответ

1 голос
/ 25 мая 2020

Например, предположим, что у вас есть служба, работающая на порту 5555 на вашем хосте.

Ниже приведены четыре решения, если вы хотите общаться с вашим хостом из docker контейнер:

  1. Вы на linux: Чтобы связаться с вашим хостом, вам необходимо связаться с ним через IP-адрес сети моста по умолчанию. Обычно он называется docker0, а его IP-адрес выглядит примерно как 172.17.0.1 (вы должны проверить это значение).
    Адрес службы будет http://172.17.0.1:5555
  2. Ma c OS : Начиная с Docker 18.03, рекомендуется использовать специальное DNS-имя host.docker.internal ( здесь do c).
    Адрес службы будет be http://host.docker.internal:5555.
  3. Вы на Windows: решение такое же, как для Docker для ma c ( do c).
    Адрес службы будет http://host.docker.internal:5555.
  4. Все ОС : у вас есть stati c publi c IP или DNS-имя, указывающее на ваш сервис, вы можете просто использовать его.
    Адрес сервиса будет http://[host_public_ip_or_dns]:5555.
...