docker - 如何使用 traefik 段将请求路由到同一容器正确端口上的正确服务
问题描述
我有一个 docker 容器,它暴露了 2 个端口,每个端口用于不同的 Web 服务。一个是 API,另一个是带有文档的简单网页。
我试图理解 Traefik 的文档。看起来我需要使用段,但我失败得很惨。
我想
- https://api.mydomain.net路由到端口
my-container:4000
- https://doc.mydomain.net路由到端口
my-container:3000
这就是我现在所拥有的,它可以工作但只服务于端口 4000
my-service:
image: myregistry.com:5005/my-service:latest
container_name: my-service
labels:
- traefik.http.routers.my-service-router.tls=true
- traefik.http.routers.my-service-router.entrypoints=secure
- traefik.http.routers.my-services-router.rule=Host(`www.mydomain.net`)
networks:
- internal
我尝试了以下细分
my-service:
image: myregistry.com:5005/my-service:latest
container_name: my-service
expose:
- 4000 # my API
- 3000 # my doc
labels:
# segment myapi
- traefik.myapi.port=4000
- traefik.myapi.http.routers.my-service-router.tls=true
- traefik.myapi.http.routers.my-service-router.entrypoints=secure
- traefik.myapi.http.routers.my-services-router.rule=Host(`api.mydomain.net`)
# segment mydoc
- traefik.mydoc.port=3000
- traefik.mydoc.http.routers.my-service-router.tls=true
- traefik.mydoc.http.routers.my-service-router.entrypoints=secure
- traefik.mydoc.http.routers.my-services-router.rule=Host(`doc.mydomain.net`)
networks:
- internal
但这是错误的,不是吗?所以我根据文档尝试了不同的...
my-service:
image: myregistry.com:5005/my-service:latest
container_name: my-service
expose:
- 4000 # my service
- 3000 # my other service
labels:
# segment myapi
- traefik.myapi.port=4000
- traefik.myapi.frontend.entrypoints=secure
- traefik.myapi.frontend.rule=Host(`api.mydomain.net`)
# segment mydoc
- traefik.mydoc.port=3000
- traefik.mydoc.frontend.entrypoints=secure
- traefik.mydoc.frontend.rule=Host(`doc.mydomain.net`)
networks:
- internal
我不了解该文档,因此欢迎任何指示。
解决方案
我很确定“mydoc”和“myapi”不应该在那里:
my-service:
image: myregistry.com:5005/my-service:latest
container_name: my-service
expose:
- 4000 # my service
- 3000 # my other service
labels:
# segment myapi
- traefik.http.services.myapi.loadbalancer.server.port=4000
- traefik.http.routers.myapi.entrypoints=secure
- traefik.http.routers.myapi.rule=Host(`api.mydomain.net`)
- traefik.http.routers.myapi.service=myapi
# segment mydoc
- traefik.http.services.mydoc.loadbalancer.server.port=3000
- traefik.http.routers.mydoc.entrypoints=secure
- traefik.http.routers.mydoc.rule=Host(`adoci.mydomain.net`)
- traefik.http.routers.mydoc.service=mydoc
networks:
- internal
还要检查 traefik 容器是否也在internal
网络中。
推荐阅读
- java - 访问窗口管理器的附加视图的孩子
- skypedeveloper - ALT+SHIFT 后消息字段失去焦点
- php - 如何在 php telegram-bot 中设置应答延迟时间
- java - Socket编程——将多台服务器连接在一起
- jquery - 如何使用包装器 div 更改不透明度为 1 的内部 div 的颜色
- machine-learning - 在 pytorch 中的相关类之间共享梯度
- php - wp_schedule_single_event 无法成功运行
- android - 键盘弹起时离子输入向上推
- excel - 我可以转换为任何对象的默认界面吗?
- javascript - VueJS - 发出的事件 - 在其他计算之前显示 HTML