Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Traefik StripPrefix中间件添加到docker compose标签将导致504_Docker_Nginx_Docker Compose_Middleware_Traefik - Fatal编程技术网

将Traefik StripPrefix中间件添加到docker compose标签将导致504

将Traefik StripPrefix中间件添加到docker compose标签将导致504,docker,nginx,docker-compose,middleware,traefik,Docker,Nginx,Docker Compose,Middleware,Traefik,我已经开发了几个docker化的全堆栈web应用程序,我正在尝试使用Traefik将请求路由到这些应用程序。我想通过docker compose标签利用动态配置。我想应用stripPrefix中间件选项,这样我就可以使用相同的应用程序路由,就像每个应用程序都在根目录下提供一样。但是,一旦应用这些规则,就会产生504网关超时响应 以下是我的设置: Traefik 2.0.1 Docker 19.03.2,Compose 1.24.1 NGINX:最新图片 运行Traefik容器的全局docker

我已经开发了几个docker化的全堆栈web应用程序,我正在尝试使用Traefik将请求路由到这些应用程序。我想通过docker compose标签利用动态配置。我想应用stripPrefix中间件选项,这样我就可以使用相同的应用程序路由,就像每个应用程序都在根目录下提供一样。但是,一旦应用这些规则,就会产生504网关超时响应

以下是我的设置:

  • Traefik 2.0.1
  • Docker 19.03.2,Compose 1.24.1
  • NGINX:最新图片
  • 运行Traefik容器的
    全局
    docker网络
  • 多个多容器应用程序,每个应用程序都包括一个NGINX web服务器
  • 所有应用程序都有自己的
    本地
    网络,NGINX容器也在
    全局
    网络上
  • 每个应用程序都配置为在
    /
下面是有问题的NGINX容器的
docker compose.yml
定义:

nginx:
        image: nginx:latest
        container_name: "mps_nginx"
        volumes:
        - ./nginx/confs/nginx.conf:/etc/nginx/default.conf
        - ./static:/www/static
        restart: "always"
        labels:
            - traefik.http.routers.mps.rule=Host(`localhost`) && PathPrefix(`/mps`)
            - traefik.http.middlewares.strip-mps.stripprefix.prefixes=/mps
            - traefik.http.routers.mps.middlewares=strip-mps@docker
        networks:
        - default
        - mps
令人恼火的是,当我注释出
middleware
标签时,它运行得很好,但找不到匹配的URL模式

在此之前,我使用以下文件中定义的
whoami
容器测试了我的方法:

请求
http://localhost/whoami
返回(除其他外)
GET/HTTP/1.1

这正是我期望我的路由方法在所有其他应用程序中工作的方式。Traefik仪表板在我注册的每个中间件周围都显示绿色,但我看到的只是504个错误

如果有人有任何线索,我将不胜感激。

有一个带前缀但不以“/”结尾的单词。 按如下方式测试配置:

      - "traefik.http.routers.whoami.rule=Host(`localhost`) && (PathPrefix(`//whoami/`) || PathPrefix(`/portainer`))"
      - "traefik.http.middlewares.strip-who.stripprefix.prefixes=/whoami"

我有一个类似的问题,通过添加

-“traefik.http.middleware.strip who.stripprefix.forceslash=true”

它确保条带前缀不会同时删除正斜杠

您可以阅读有关
forceslash
文档的更多信息

是否需要路径前缀(
/portainer
)?
      - "traefik.http.routers.whoami.rule=Host(`localhost`) && (PathPrefix(`//whoami/`) || PathPrefix(`/portainer`))"
      - "traefik.http.middlewares.strip-who.stripprefix.prefixes=/whoami"