如何解决使用 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”:
http://localhost:8070/
-> "Hello-Word"
在这种情况下,它不会通过 Traefik 路由,而是直接通过 api-service。是否可以通过 Traefik 实现?
解决方法
要让 traefik 使用 docker 路由服务,您应该有标签。 Traefik 将获取这些标签以了解如何进行路由。
因此,要将 api.service.localhost
的请求路由到您的 api 服务,您应该具有定义相应 rule 的标签:
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
(更多帮助以公开仪表板 here)。
注意,如果您的 api 服务使用默认端口以外的端口,您可以添加此标签:
traefik.http.services.service.loadbalancer.server.port=80
Ps,不要暴露两次80端口,你只需要暴露给traefik容器即可。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。