Docker 容器中的Traefik和我的web应用
我正在尝试做一些我认为很简单的事情,但看起来我错过了一件事 我有一个web应用程序,它是我管理的docker映像包。它在端口9000上启动侦听服务器。它在Docker 容器中的Traefik和我的web应用,docker,traefik,Docker,Traefik,我正在尝试做一些我认为很简单的事情,但看起来我错过了一件事 我有一个web应用程序,它是我管理的docker映像包。它在端口9000上启动侦听服务器。它在/admin/metrics上有一个端点发布度量。 应用程序部署在需要我在端口9100上发布这些度量的系统上,路径为/metrics。我可以更改应用程序、运行第二台服务器等,但为了好玩,我尝试了一些更快的方法(我想): 运行伴随的反向代理 我选择了traefik,并设法使用文件提供程序对其进行了正确配置:在我的机器上运行时(无容器),它会正确地
/admin/metrics
上有一个端点发布度量。
应用程序部署在需要我在端口9100上发布这些度量的系统上,路径为/metrics
。我可以更改应用程序、运行第二台服务器等,但为了好玩,我尝试了一些更快的方法(我想): 运行伴随的反向代理
我选择了traefik,并设法使用文件提供程序对其进行了正确配置:在我的机器上运行时(无容器),它会正确地将调用从端口9100上的/metrics
重定向到我的应用程序的/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"
请注意,我试图用127.0.0.1
或localhost
替换0.0.0
,两者都不起作用
最后,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”的内容,但无法理解是什么
有人有想法吗?不知道为什么它会这样工作,但我成功地为traefik使用了另一种配置:
[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://localhost:9000/"
[http.middlewares]
[http.middlewares.PathConvert]
[http.middlewares.PathConvert.replacePathRegex]
regex = "^/metrics"
replacement = "/admin/metrics/prometheus"
它似乎将我重定向到,而不是。在toml文件中配置服务时,您是否尝试将端口声明作为单独的指令分开?通常情况下,这是单独完成的,因此我提出了建议,但您也说过它在本地对您有效,所以我不太相信这会有所帮助。我接下来的步骤是启用Traefik仪表板,并进行调试以验证日志。
[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://localhost:9000/"
[http.middlewares]
[http.middlewares.PathConvert]
[http.middlewares.PathConvert.replacePathRegex]
regex = "^/metrics"
replacement = "/admin/metrics/prometheus"