Docker compose 仅使用docker compose router服务入口点的traefik v2.2帮助

Docker compose 仅使用docker compose router服务入口点的traefik v2.2帮助,docker-compose,traefik,Docker Compose,Traefik,开始学习docker,traefik在家玩 目标:将所有内容放在docker compose.yml和.env文件中,了解基本知识,并进行相应的评论 想要从traefik.test.local/dashboard获取仪表板,而不是test.local:8080,同样地,应该从traefik.test.local/api访问api。所以不必考虑端口号 在/etc/hosts 127.0.0.1 test.local 127.0.0.1 traefik.test.local

开始学习docker,traefik在家玩

目标:将所有内容放在
docker compose.yml
.env
文件中,了解基本知识,并进行相应的评论

想要从
traefik.test.local/dashboard
获取仪表板,而不是
test.local:8080
,同样地,应该从
traefik.test.local/api
访问api。所以不必考虑端口号

/etc/hosts

127.0.0.1       test.local
127.0.0.1       traefik.test.local
docker-compose.yml

version: "3.7"

services:
  traefik:
    # The official v2 Traefik docker image
    image: traefik:v2.2
    # Lets name the container
    container_name: traefik
    command:
      # Enables the web UI
      - "--api.insecure=true" 
      # Tells Traefik to listen to docker
      - "--providers.docker"
    ports:
      # The HTTP port
      - "80:80"
      # The Web UI (enabled by --api.insecure=true)
      - "8080:8080"
    volumes:
      # So that Traefik can listen to the Docker events
      - /var/run/docker.sock:/var/run/docker.sock
    #labels:
      #- "traefik.http.routers.router.rule=Host(`traefik.test.local/dashboard`)"
      #- "traefik.http.routers.router.rule=Host(`traefik.test.local/api`)"
    restart:
      always
无法理解如何从路由器连接到服务。如果我哪里做错了,也要纠正我。多谢各位


PS:OS:kde neon

您可以使用以下定义实现这一点,您需要为路由器和服务添加标签,而不仅仅是路由器

proxy:
    image: traefik:v2.1
    command:
      - '--providers.docker=true'
      - '--entryPoints.web.address=:80'
      - '--entryPoints.metrics.address=:8082'
      - '--providers.providersThrottleDuration=2s'
      - '--providers.docker.watch=true'
      - '--providers.docker.swarmMode=true'
      - '--providers.docker.swarmModeRefreshSeconds=15s'
      - '--providers.docker.exposedbydefault=false'
      - '--providers.docker.defaultRule=Host("traefik.lvh.me")'
      - '--accessLog.bufferingSize=0'
      - '--api=true'
      - '--api.dashboard=true'
      - '--api.insecure=true'
      - '--ping.entryPoint=web'
    volumes:
      - '/var/run/docker.sock:/var/run/docker.sock:ro'
    ports:
      - '80:80'
      - '8080:8080'
    restart:
      always
    deploy:
      labels:
        - traefik.enable=true
        - traefik.docker.network=monitoring
        - traefik.http.services.traefik-dashboard.loadbalancer.server.port=8080
        - traefik.http.routers.traefik-dashboard.rule=Host(`dashboard.traefik.lvh.me`)
        - traefik.http.routers.traefik-dashboard.service=traefik-dashboard
        - traefik.http.routers.traefik-dashboard.entrypoints=web
        - traefik.http.services.traefik-api.loadbalancer.server.port=80
        - traefik.http.routers.traefik-api.rule=Host(`api.traefik.lvh.me`)
        - traefik.http.routers.traefik-api.service=traefik-api
        - traefik.http.routers.traefik-api.entrypoints=web
    logging:
      driver: json-file
      options:
        'max-size': '10m'
        'max-file': '5'


另外,如果您使用
lvh.me
域,则无需编辑
/etc/hosts

OP可能需要一些解释+1代表
lvh.me
。将
dashboard.traefik.lvh.me
替换为
traefik.lvh.me
=>traefik.lvh.me或
traefik.lvh.me/dashboard
按要求转到
traefik.lvh.me/dashboard
api.traefik.lvh.me
不会转到显示连接错误的任何位置。但是,
traefik.lvh.me/api/rawdata
显示数据。因此,无法掌握
dashboard.traefik.lvh.me
api.traefik.lvh.me
的角色。api域被转发到端口80,默认情况下,这将显示404错误,与fo to时相同。你想在这里实现什么?为什么你甚至需要这个域名?对不起。我问了一个糟糕的问题。仪表板和api实际上都是从端口8080提供服务的。我在学习。希望你能理解。
127.0.0.1       test.local
127.0.0.1       traefik.test.local