Прометей в контейнере Docker не может получить доступ к приложению Spring Boot - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть приложение Spring Boot, которое работает на порту 9000 локально (не в контейнере). Приложение настроило привод с микрометром Prometheus, и вся статистика доступна по URL localhost: 9000 / привод / prometheus.

Я запускаю Prometheus в контейнере Docker с помощью следующей команды:

docker run --name spring_boot_prometheus -p 9090:9090 -p 9000:9000 -v /Users/xyz/docker/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus

prometheus.yml

global:
  scrape_interval:     5s
  evaluation_interval: 5s
scrape_configs:
- job_name: 'users-app'
  metrics_path: '/actuator/prometheus'
  static_configs:
  - targets: ['localhost:9000']

Команда docker ps возвращает следующее:

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                            NAMES
1568ec9e8353        prom/prometheus     "/bin/prometheus --c…"   10 seconds ago      Up 9 seconds        0.0.0.0:9000->9000/tcp, 0.0.0.0:9090->9090/tcp   spring_boot_prometheus

Пользовательский интерфейс говорит, что prometheus не может подключиться к конечной точке пружинной загрузки, но он доступен. Если я нажимаю на конечную точку, она перенаправляет меня на 1568ec9e8353:9000 вместо localhost:9000 enter image description here

Как я могу решить проблему?

Благодарим вас за помощь!

Ответы [ 2 ]

0 голосов
/ 13 октября 2018

In prometheus.yml вместо localhost:9000 поставить конкретное название контейнера: spring_boot_prometheus:9000.

Рекомендации Docker - использовать имена контейнеров вместо IP-адресов контейнеров.

0 голосов
/ 18 сентября 2018

Для контейнера Prometheus Docker 'localhost' означает локальный.Таким образом, Прометей пытается подключиться в контейнере к порту 9000. Это не будет работать.

Кроме того, в контейнере Прометей не работает служба на порту 9000, насколько я знаю из вашего сообщения.

Если оба приложения находятся в контейнере Docker:

Целевой контейнер имеет свой собственный IP-адрес в вашей установке Docker.Обычно 172.17.yz

Требуется простая сеть докеров, и после этого вы запускаете оба контейнера с этим:

$ docker network create mynet

$ docker run --name foo --net mynet img

$ docker run --name bar --net mynet img

Найдено здесь: forums.docker.com

Если на вашем компьютере запущена служба (9000) без докера:

Это не стандартный вариант использования

Прочитайте здесь как это настроить.

Вы должны получить IP-адрес своего физического компьютера.Например, 192.168.0.10.Тогда это цель для Прометея.

...