找不到 docker compose 服务的 Traefik v2 404 页面

Traefik v2 404 page not found for docker compose service

提问人:Amon Bazongo 提问时间:11/17/2023 最后编辑:Amon Bazongo 更新时间:11/20/2023 访问量:29

问:

赏金将在 6 天后到期。这个问题的答案有资格获得 +50 声望赏金。阿蒙·巴宗戈(Amon Bazongo)希望引起人们对这个问题的更多关注

下面是一个 docker compose 文件

version: "3"
networks:
  vester-net:
    name: vester-net

services:
  traefik:
    image: traefik:v2.10
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro        # It's not recommended mounting the docker socket into a container -> see https://github.com/wollomatic/traefik2-hardened
    networks:
      - vester-net
    command: --api.insecure=true --providers.docker --accessLog
    ports:
      - 80:80
      - 8080:8080
    labels:
      - traefik.enable=true
 
  whoami:
    image: traefik/whoami:v1.8
    networks:
      - vester-net
    labels:
      - traefik.http.routers.mywhoami.rule=(Host(`localhost`) && PathPrefix(`/whoami`))

  simplified_flask:
    build:
      context: ./apps/score
    networks:
      - vester-net
    labels:
      - traefik.http.routers.myflask.rule=(Host(`localhost`) && PathPrefix(`/flask`))

当我去 http://localhost:8080 时,一切都很顺利:它重定向到 traefik 仪表板并且它可以工作。

当我去 http://localhost/whoami 时,一切都很顺利:我看到whoami信息

当我转到 http://localhost/flask 时,它说找不到 404 页。

我很想得到社区的支持。提前致谢。

docker-compose traefik

评论


答:

1赞 VonC 11/20/2023 #1

您已将 Traefik 设置为根据 URL 路径将请求路由到不同的服务。您的“404 页面未找到”错误可能是由于此服务的 Traefik 标签配置错误。

+------------------+          +-----------------+          +------------------+
|                  | 80, 8080 |                 |          |                  |
|     Traefik      +---------->  whoami service |          | simplified_flask |
|                  |          |                 |          |     service      |
+------------------+          +-----------------+          +------------------+
      ^      |                    /whoami                        /flask
      |      |                      ^                              ^
      |      |                      |                              |
      |      +----------------------+------------------------------+
      |
      +-- Traefik Dashboard (http://localhost:8080)

确保服务的 Traefik 标签配置正确。应正确定义主机和路径前缀。(localhost/烧瓶simplified_flasktraefik.http.routers.myflask.rule- traefik.http.routers.myflask.rule=(Host() && PathPrefix()))

使用 Traefik 仪表板检查路由器和服务。查找与您的 Flask 应用程序相对应的路由器(例如,myflask)。检查路由器是否正确配置并链接到正确的服务。

并检查 Traefik 容器 () 的日志,查看是否有任何与服务相关的错误或警告。docker logs [traefik_container_name]simplified_flask

确保 Flask 应用程序配置为在根 () 或指定的路径前缀 () 上提供内容。如果它需要不同的基本路径,它可能会以 404 错误进行响应。
为此,请打开 Flask 应用程序代码,该代码通常位于 中的服务上下文中指定的目录中。
//flasksimplified_flaskdocker-compose.yml


你会怎么做?

我将从现有的 Traefik-Flask 教程/示例开始,然后对其进行修改以匹配我的用例。

例如,从 testdrivenio/flask-docker-traefik 开始,提出一个很好的起点。

此外,Paul Marriott 的文章“Flask、Gunicorn、Docker 和 Traefik”可以为您提供一些想法。

评论

0赞 Amon Bazongo 11/20/2023
你会怎么做?因为正如您在 docker compose 文件中看到的那样,除非我错过了您看到的东西,否则它都已正确配置。
0赞 VonC 11/20/2023
@AmonBazongo我已经编辑了答案以解决您的评论。
1赞 LombardiD 11/23/2023 #2

改变

traefik.http.routers.myflask.rule=(Host(`localhost`) && PathPrefix(`/flask`))

traefik.http.routers.simplified_flask.rule=(Host(`localhost`) && PathPrefix(`/flask`))

这样一来,Traefik 就知道要路由到什么服务