首页 > 解决方案 > 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 上指定我的应用程序正在运行的端口。

多谢你们!

标签: node.jsamazon-web-servicesdockeramazon-ec2traefik

解决方案


从理论上讲,正如您所说,您不必手动指定端口。

我不完全确定这是原因,但您使用的是完整的 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

推荐阅读