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
我的配置是一个简单的 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