Traefik - Docker Swarm - 基本路由问题

Traefik - Docker Swarm - basic routing issue

我的配置是一个简单的 Docker Swarm(在 Docker for Windows 上),带有一个 Treafik 容器和一个非常简单的 Spring Boot 'echo' 容器.

我想将 'localhost/traefik' 的浏览器请求转发到 Traefik 仪表板,并将 'localhost/echo/something' 转发到一个简单的 Sprint Boot echo 应用程序。

预计工作:

localhost/treafik => gives a "Gateway timeout"
localhost/echo/something => gives a "Gateway timeout"

预计不会工作,但会绕过 Traefik(错误地):

localhost:8080 => shows the Traefik dashboard
localhost:8082/echo/something => { "status":"something" }

如何改进 docker-compose.yml 文件以获得预期的结果?这与 'networking' 有关系吗?创建任何网络时,即使是覆盖,也会给出错误消息。

version: '3.7'
services:
  traefik:
    image: traefik:latest
    command: --api --docker
    restart: always
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - //k/data/slackbot/traefik.toml:/traefik.toml
    ports:
      - "80:80"
      - "8080:8080"
    labels:
      - "traefik.enable=true"
      - "traefik.frontend.rule=Host:localhost;PathPrefixStrip:/traefik"
      - "traefik.port=8080"
      - "traefik.protocol=http"
      - "traefik.backend=traefik"
  slackbotsimple:
    image: solvedshared/slackbotsimple:latest
    ports:
      - 8082:8080
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    labels:
      - "traefik.enable=true"
      - "traefik.frontend.rule=Host:localhost;PathPrefix:/echo"
      - "traefik.port=8082"
      - "traefik.protocol=http"
      - "traefik.backend=slackbotsimple

第一个问题是网络问题。解决了,多亏了聪明的吉姆。

另一个问题是我使用了错误的端口号。要从前端“/echo”路由到后端,不使用 'ports' 部分。我可以直接路由到 slackbot 应用程序的公开端口!

查看端口配置:只有 80 个可用。

version: '3.7'
services:
  traefik:
    image: traefik:latest
    command: --api --docker
    restart: always
    networks:
      - slackbotnet
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - //k/data/slackbot/traefik.toml:/traefik.toml
    ports:
      - "80:80"
    labels:
      - "traefik.enable=true"
      - "traefik.docker.network=slackbotnet"
      - "traefik.frontend.rule=Host:localhost;PathPrefixStrip:/traefik"
      - "traefik.port=8080"
      - "traefik.protocol=http"
      - "traefik.backend=traefik"
  slackbotsimple:
    image: solvedshared/slackbotsimple:latest
    networks:
      - slackbotnet
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    labels:
      - "traefik.enable=true"
      - "traefik.docker.network=slackbotnet"
      - "traefik.frontend.rule=Host:localhost;PathPrefix:/echo"
      - "traefik.port=8080"
      - "traefik.protocol=http"
      - "traefik.backend=slackbotsimple"

networks:
  slackbotnet:
    name: slackbotnet