docker-compose - 使用 Traefik 和 docker-compose 的端口转发问题
问题描述
我想要下一个端口转发:
http://traefik.service.localhost/
->Traefik UI
http://api.service.localhost/
->'Hello-Word' page from api-service
这是我尝试创建适当的 docker-compose.yml文件:
version: '3.8'
services:
reverse-proxy:
image: traefik:v2.4
container_name: reverse-proxy
command:
- "--api.insecure=true"
- "--providers.docker"
ports:
- "80:80"
- "8080:8080"
labels:
- traefik.enable=true
- traefik.docker.network=pred-network
volumes:
- /var/run/docker.sock:/var/run/docker.sock
networks:
- pred-network
api-service:
image: x86_64/prediction-service:0.8.1
container_name: api-service
environment:
SERVING_SERVICE: model-service
expose:
- 80
labels:
- traefik.enable=true
- traefik.http.routers.api-service.rule=Host(`api.service.localhost`)
networks:
- pred-network
networks:
pred-network:
我得到以下信息:
http://traefik.service.localhost/
->HTTP Error 404. The requested resource is not found.
http://api.service.localhost/
->HTTP Error 404. The requested resource is not found.
唯一有效的链接:
http://api.service.localhost:8080/
->Traefik UI
如果我包括:
ports:
- "8070:80"
进入docker-compose.yml的api-service部分,我可以访问我的“Hello-Word”:
->
在这种情况下,它不会通过 Traefik 路由,而是直接通过api-service路由。是否可以通过 Traefik 做到这一点?http://localhost:8070/
"Hello-Word"
解决方案
要让 traefik 使用 docker 路由服务,您应该有标签。Traefik 将获取这些标签以了解如何进行路由。
因此,要将请求api.service.localhost
路由到您的 api 服务,您应该具有定义相应规则的标签:
traefik.http.routers.service.rule=Host(`api.service.localhost`)
至于 Traefik 的标签,你应该有两个标签:
traefik.http.routers.traefik.rule=Host(`traefik.service.localhost`)
traefik.http.routers.traefik.service=api@internal
除了这些 traefik 标签,您应该告诉 traefik 通过添加此配置使用特定服务公开仪表板:(在此处--api.dashboard
公开仪表板的更多帮助)。
注意,如果您的 api 服务默认使用另一个端口,您可以添加此标签:
traefik.http.services.service.loadbalancer.server.port=80
ps,不要暴露两次80端口,只需要为traefik容器暴露即可。
推荐阅读
- kubernetes - 如何在 AWS EKS 的同一节点中部署 pod
- r - 删除 geom_label_repel 中文本周围的框架
- arm - GDB 无法进入功能,OZone 可以
- postman - Request Body is cryptic when capturing requests with Postman
- python - PYSPARK UDF 根据日期范围展开记录
- javascript - Vue CLI - TypeError: Cannot read properties of undefined (reading '1')
- r - 如何将循环与 geom_vline 和 facet_wrap 一起使用?
- typescript - jest with vue3 typescript TypeError: Cannot read property 'deep' of undefined
- docker - 为什么 Drupal for Docker 从服务器返回空回复?
- performance - 高负载数据更新架构