node.js - Traefik 仍然需要端口规范
问题描述
我是 AWS 的新手,也是 Traefik 的新手。我在尝试消除我正在开发的应用程序中对端口指定的需求时遇到了很多麻烦。
当我点击http://api-landingpage.cayama.com.br/它给了我一个 404 页面错误,但是当我尝试http://api-landingpage.cayama.com.br:8001/它去我的 api 正确。
我在 AWS Route53 中托管了我的域,并且我使用 docker 作为提供程序。
这是我的配置:
docker-compose.yml:版本:“3”
services:
app:
build: .
ports:
- "8001:8001"
command: "npm start"
码头工人生产.yml:
version: "3"
services:
traefik:
image: traefik
command:
- "--api.insecure=true"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
ports:
- "80:80"
- "8080:8080"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
app:
labels:
- "traefik.enable=true"
- "traefik.http.routers.app.rule=Host(`http://api-landingpage.cayama.com.br/`)"
- "traefik.http.routers.app.entrypoints=web"
我确定我在这里缺少一个基本的东西,有人可以帮我吗?
我只想不必在 URL 上指定我的应用程序正在运行的端口。
多谢你们!
解决方案
从理论上讲,正如您所说,您不必手动指定端口。
我不完全确定这是原因,但您使用的是完整的 URL 而不是主机。基本上你应该替换这个:
- "traefik.http.routers.app.rule=Host(`http://api-landingpage.cayama.com.br/`)"
有了这个:
- "traefik.http.routers.app.rule=Host(`api-landingpage.cayama.com.br`)"
如果它不能解决您的问题,您可以尝试使用该loadbalancer
指令,即使理论上它对 Docker Swarm 有用,而不是 Docker(将其放入您的app
服务中):
- "traefik.http.services.app.loadbalancer.server.port=8001"
然后,如果它仍然无法正常工作,请启用调试并在日志中查找错误。为了启用调试,请在以下command
部分将其添加到您的 Traefik 服务:
- --log.level=DEBUG
推荐阅读
- scala - scala:如何通过编译时宏的复杂多态性获取类名?
- android-studio - android studio 去声明不适用于 buildSrc
- jsf - 运行时 GlassFish 启动,但 Java Server Faces Web 应用程序未部署
- javascript - 我在我的代码中使用标签。但是 javascript 一直在抱怨“标签不是声明”。
- android - Bixby 胶囊切换电话功能?
- c# - 如何动态禁用和启用按钮?
- python - 在重现正态分布的最大似然估计时遇到错误
- python - 如何返回与重复模式匹配的整个非拉丁字符串,例如 AAB 或 ABB
- reactjs - 无法解决错误无法读取反应js中未定义的属性'map'
- html - 无论如何要修复它的代码,以便我的照片条目不像我的侧边栏那样圆