Docker traefik不遵守前端规则

Docker traefik不遵守前端规则,docker,docker-compose,reverse-proxy,traefik,Docker,Docker Compose,Reverse Proxy,Traefik,我正在尝试在docker主机上部署多个应用程序,并让traefik根据主机名将流量路由到不同的应用程序 我正在为我的所有docker容器使用docker compose 这是我的traefik.yaml文件 version: '3.5' services: traefik: image: traefik container_name: traefik command: --api --docker networks: - traefik_netw

我正在尝试在docker主机上部署多个应用程序,并让traefik根据主机名将流量路由到不同的应用程序

我正在为我的所有docker容器使用docker compose

这是我的
traefik.yaml
文件

version: '3.5'

services:
  traefik:
    image: traefik
    container_name: traefik
    command: --api --docker
    networks:
      - traefik_network
    ports:
      - "80:80"
      - "8080:8080"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

networks:
  traefik_network:
     name: traefik_network
version: '3.5'

services:
   mysql:
     image: mysql:5.7
     volumes:
       - wpapp1_mysql:/var/lib/mysql
     restart: always
     container_name: wpapp1_mysql
     networks:
       - traefik_network
     environment:
       MYSQL_ROOT_PASSWORD: wpapp1
       MYSQL_DATABASE: wpapp1
       MYSQL_USER: wpapp1
       MYSQL_PASSWORD: wpapp1
   wordpress:
     depends_on:
       - mysql
     image: wordpress:latest
     volumes:
       - wpapp1_wordpress:/var/www/html
     restart: always
     container_name: wpapp1_wordpress
     networks:
       - traefik_network
     labels:
      - "traefik.frontend.rule=Host:wpapp1.example.com"
      - "traefik.port=80"
      - "traefik.docker.network=traefik_network"
     environment:
       WORDPRESS_DB_HOST: mysql:3306
       WORDPRESS_DB_USER: wpapp1
       WORDPRESS_DB_PASSWORD: wpapp1
volumes:
    wpapp1_mysql:
      name: wpapp1_mysql
    wpapp1_wordpress:
      name: wpapp1_wordpress
networks:
    traefik_network:
      external:
         name: traefik_network
version: '3.5'

services:
   mysql:
     image: mysql:5.7
     volumes:
       - wpapp2_mysql:/var/lib/mysql
     restart: always
     container_name: wpapp2_mysql
     networks:
       - traefik_network
     environment:
       MYSQL_ROOT_PASSWORD: wpapp2
       MYSQL_DATABASE: wpapp2
       MYSQL_USER: wpapp2
       MYSQL_PASSWORD: wpapp2
   wordpress:
     depends_on:
       - mysql
     image: wordpress:latest
     volumes:
       - wpapp2_wordpress:/var/www/html
     restart: always
     container_name: wpapp2_wordpress
     networks:
       - traefik_network
     labels:
      - "traefik.frontend.rule=Host:wpapp2.example.com"
      - "traefik.port=80"
      - "traefik.docker.network=traefik_network"
     environment:
       WORDPRESS_DB_HOST: mysql:3306
       WORDPRESS_DB_USER: wpapp2
       WORDPRESS_DB_PASSWORD: wpapp2
volumes:
    wpapp2_mysql:
      name: wpapp2_mysql
    wpapp2_wordpress:
      name: wpapp2_wordpress
networks:
    traefik_network:
      external:
         name: traefik_network
这是我的
wpap1.yaml
文件

version: '3.5'

services:
  traefik:
    image: traefik
    container_name: traefik
    command: --api --docker
    networks:
      - traefik_network
    ports:
      - "80:80"
      - "8080:8080"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

networks:
  traefik_network:
     name: traefik_network
version: '3.5'

services:
   mysql:
     image: mysql:5.7
     volumes:
       - wpapp1_mysql:/var/lib/mysql
     restart: always
     container_name: wpapp1_mysql
     networks:
       - traefik_network
     environment:
       MYSQL_ROOT_PASSWORD: wpapp1
       MYSQL_DATABASE: wpapp1
       MYSQL_USER: wpapp1
       MYSQL_PASSWORD: wpapp1
   wordpress:
     depends_on:
       - mysql
     image: wordpress:latest
     volumes:
       - wpapp1_wordpress:/var/www/html
     restart: always
     container_name: wpapp1_wordpress
     networks:
       - traefik_network
     labels:
      - "traefik.frontend.rule=Host:wpapp1.example.com"
      - "traefik.port=80"
      - "traefik.docker.network=traefik_network"
     environment:
       WORDPRESS_DB_HOST: mysql:3306
       WORDPRESS_DB_USER: wpapp1
       WORDPRESS_DB_PASSWORD: wpapp1
volumes:
    wpapp1_mysql:
      name: wpapp1_mysql
    wpapp1_wordpress:
      name: wpapp1_wordpress
networks:
    traefik_network:
      external:
         name: traefik_network
version: '3.5'

services:
   mysql:
     image: mysql:5.7
     volumes:
       - wpapp2_mysql:/var/lib/mysql
     restart: always
     container_name: wpapp2_mysql
     networks:
       - traefik_network
     environment:
       MYSQL_ROOT_PASSWORD: wpapp2
       MYSQL_DATABASE: wpapp2
       MYSQL_USER: wpapp2
       MYSQL_PASSWORD: wpapp2
   wordpress:
     depends_on:
       - mysql
     image: wordpress:latest
     volumes:
       - wpapp2_wordpress:/var/www/html
     restart: always
     container_name: wpapp2_wordpress
     networks:
       - traefik_network
     labels:
      - "traefik.frontend.rule=Host:wpapp2.example.com"
      - "traefik.port=80"
      - "traefik.docker.network=traefik_network"
     environment:
       WORDPRESS_DB_HOST: mysql:3306
       WORDPRESS_DB_USER: wpapp2
       WORDPRESS_DB_PASSWORD: wpapp2
volumes:
    wpapp2_mysql:
      name: wpapp2_mysql
    wpapp2_wordpress:
      name: wpapp2_wordpress
networks:
    traefik_network:
      external:
         name: traefik_network
这是我的
wpapp2.yaml
文件

version: '3.5'

services:
  traefik:
    image: traefik
    container_name: traefik
    command: --api --docker
    networks:
      - traefik_network
    ports:
      - "80:80"
      - "8080:8080"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

networks:
  traefik_network:
     name: traefik_network
version: '3.5'

services:
   mysql:
     image: mysql:5.7
     volumes:
       - wpapp1_mysql:/var/lib/mysql
     restart: always
     container_name: wpapp1_mysql
     networks:
       - traefik_network
     environment:
       MYSQL_ROOT_PASSWORD: wpapp1
       MYSQL_DATABASE: wpapp1
       MYSQL_USER: wpapp1
       MYSQL_PASSWORD: wpapp1
   wordpress:
     depends_on:
       - mysql
     image: wordpress:latest
     volumes:
       - wpapp1_wordpress:/var/www/html
     restart: always
     container_name: wpapp1_wordpress
     networks:
       - traefik_network
     labels:
      - "traefik.frontend.rule=Host:wpapp1.example.com"
      - "traefik.port=80"
      - "traefik.docker.network=traefik_network"
     environment:
       WORDPRESS_DB_HOST: mysql:3306
       WORDPRESS_DB_USER: wpapp1
       WORDPRESS_DB_PASSWORD: wpapp1
volumes:
    wpapp1_mysql:
      name: wpapp1_mysql
    wpapp1_wordpress:
      name: wpapp1_wordpress
networks:
    traefik_network:
      external:
         name: traefik_network
version: '3.5'

services:
   mysql:
     image: mysql:5.7
     volumes:
       - wpapp2_mysql:/var/lib/mysql
     restart: always
     container_name: wpapp2_mysql
     networks:
       - traefik_network
     environment:
       MYSQL_ROOT_PASSWORD: wpapp2
       MYSQL_DATABASE: wpapp2
       MYSQL_USER: wpapp2
       MYSQL_PASSWORD: wpapp2
   wordpress:
     depends_on:
       - mysql
     image: wordpress:latest
     volumes:
       - wpapp2_wordpress:/var/www/html
     restart: always
     container_name: wpapp2_wordpress
     networks:
       - traefik_network
     labels:
      - "traefik.frontend.rule=Host:wpapp2.example.com"
      - "traefik.port=80"
      - "traefik.docker.network=traefik_network"
     environment:
       WORDPRESS_DB_HOST: mysql:3306
       WORDPRESS_DB_USER: wpapp2
       WORDPRESS_DB_PASSWORD: wpapp2
volumes:
    wpapp2_mysql:
      name: wpapp2_mysql
    wpapp2_wordpress:
      name: wpapp2_wordpress
networks:
    traefik_network:
      external:
         name: traefik_network
所以现在我希望traefik基于主机名
wpap1.example.com
wpap2.example.com
进行路由,但是traefik是负载平衡流量

因此,当我转到
http:/wpap1.example.com
时,traefik正在两个应用程序之间进行负载平衡,其他主机名也是如此。既然我特别添加了
traefik.frontend.rule

我是说这到底是怎么回事?
我花了好几个小时想弄清楚到底发生了什么,在我发疯之前,我决定在这里找一些人,以获得关于这里发生了什么的帮助。

将您的数据库放在不同的网络上。否则,WordPress将对同一docker网络中的两个mysql实例进行负载平衡(这是在同一网络上有两个具有相同别名的容器时的预期行为)。您可以使用默认网络执行此操作:

version: '3.5'

services:
   mysql:
     image: mysql:5.7
     volumes:
       - mysql:/var/lib/mysql
     restart: unless-stopped
     networks:
       - db
     environment:
       MYSQL_ROOT_PASSWORD: wpapp
       MYSQL_DATABASE: wpapp
       MYSQL_USER: wpapp
       MYSQL_PASSWORD: wpapp
   wordpress:
     depends_on:
       - mysql
     image: wordpress:latest
     volumes:
       - wordpress:/var/www/html
     restart: unless-stopped
     networks:
       - traefik
       - db
     labels:
      - "traefik.frontend.rule=Host:wpapp1.example.com"
      - "traefik.port=80"
      - "traefik.docker.network=traefik_network"
     environment:
       WORDPRESS_DB_HOST: mysql:3306
       WORDPRESS_DB_USER: wpapp
       WORDPRESS_DB_PASSWORD: wpapp
volumes:
    mysql:
    wordpress:
networks:
    db:
    traefik:
      external:
         name: traefik_network

你确定是traefik负载平衡,而不是WordPress负载平衡到同一traefik网络中的重复mysql实例吗?嗯,不确定..我该怎么做才能避免这种情况发生?让我们假设它的wordpress正在这样做。因为我刚刚检查了日志,我发现甚至数据库也在进行负载平衡。我的意思是我有docker compose,所以为什么应用程序之间没有分离呢?我不喜欢在主机上公开端口,所以不确定docker为什么会这样做将mysql放在不同的网络上,最简单的方法是根本不将其放在网络上,让compose作为默认网络。然后将WordPress放在traefik和默认网络上(默认网络名为“default”).我尝试使用不同的网络来创建应用程序..但是当我在另一个网络中创建应用程序时,traefik不起作用..因此,任何能够帮助在traefik后面分割这些应用程序的最佳方法的人都会很感激..我希望给出我自己的网络名称,而不是使用默认网络..当我尝试这样做时,traefik没有发现任何东西并且正在获取网关超时。那么我如何为mysql指定不同的网络,然后让wordpress在traefik网络和不同应用的自定义网络上?我可以使用自定义网络名称而不是使用
默认值
?我可以使用像
db\u network
或其他定制的东西吗?使其唯一性不是问题……我想我只是这样做了,但仍然存在问题您没有为db network声明特定名称吗
name:db
?是的,我现在有这个问题,但仍然有问题…我刚刚为wpapp1做了,并且仍然通过traefik获得url loadbalanced,所以不确定loadbalanced发生在哪里,但是如果只更新app1并尝试连接到app1,并且app1尝试连接到它的数据库,app1难道不能看到仍然在traefik网络上的第二个数据库吗?