Я пытаюсь сделать что-то, что мне показалось простым, но похоже, что мне чего-то не хватает.
У меня есть веб-приложение, которое представляет собой пакет в образе докера, которым я управляю. Он запускает сервер, прослушивающий порт 9000. Он имеет метрики публикации конечной точки на /admin/metrics
. Приложение развернуто в системе, которая требует, чтобы я опубликовал эти метрики на порту 9100 с путем /metrics
. Я мог изменить приложение, запустить второй сервер и т. Д., Но для развлечения я попробовал кое-что быстрее (подумал я): запуск обратного прокси-сервера.
Я выбрал traefik, и мне удалось правильно настроить его с помощью провайдера файлов: при работе на моем компьютере (без контейнера) он перенаправляет вызовы с /metrics
через порт 9100 на мое приложение /admin/metrics
,Но когда он внутри контейнера, он выдает только 404 ошибки, хотя конфигурация в порядке. Я также попытался запустить только приложение, и у меня есть traefik на моем компьютере, который ведет к приложению внутри контейнера, но он тоже не работает.
Это моя конфигурация:
#/app/traefik.toml
[entryPoints]
[entryPoints.MetricsProxy]
address = ":9100"
[providers]
providersThrottleDuration = 42
[providers.file]
directory = "/app"
watch = false
[api]
insecure = false
dashboard = false
debug = false
[log]
level = "TRACE"
#/app/metrics.toml
[http]
[http.routers]
[http.routers.Router0]
entryPoints = ["MetricsProxy"]
middlewares = ["PathConvert"]
service = "MetricsService"
rule = "Path(`/metrics`)"
[http.services]
[http.services.MetricsService]
[http.services.MetricsService.loadbalancer]
[[http.services.MetricsService.loadBalancer.servers]]
url = "http://0.0.0.0:9000"
[http.middlewares]
[http.middlewares.PathConvert]
[http.middlewares.PathConvert.addPrefix]
prefix = "/admin"
Обратите внимание, что я пытался заменить 0.0.0.0
на 127.0.0.1
или localhost
, ни один не работает.
Наконец, Dockerfile
:
FROM openjdk:8-jre-slim
WORKDIR /app
RUN \
apt-get update -qq && apt-get install -y -qq curl && \
curl -sSL https://github.com/containous/traefik/releases/download/v2.0.4/traefik_v2.0.4_linux_amd64.tar.gz | tar -xz
COPY bin/myapp.sh .
COPY target/universal/bluevalet-server.zip .
COPY deploy/traefik/traefik.toml .
COPY deploy/traefik/metrics.toml .
COPY deploy/nginx.conf .
COPY deploy/run.sh .
#run.sh ~~> ./traefik --configfile /app/traefik.toml & ./myapp.sh
CMD [ "/app/run.sh" ]
EXPOSE 9000
EXPOSE 9100
Я думаю, что-то с"localhost" в определении сервиса, но не может понять, что.
У кого-нибудь есть идея?