Search code examples
traefik

Traefik not set backend/frontend in swarm mode


i would like use traefik in a cluster swarm, following this guide https://docs.traefik.io/user-guide/swarm-mode/#deploy-traefik i've write this stack file:

  traefik:
    image: traefik:alpine
    deploy:
      placement:
        constraints:
          - node.role == manager
    command: --api --docker --docker.watch --docker.swarmMode
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    ports:
      - "80:80"
      - "8080:8080"
    labels:
      - "traefik.enable=false"

  backend:
    image: registry.example.com/backend
    labels:
      - "traefik.backend=backend"
      - "traefik.backend.buffering.maxRequestBodyBytes=2147483648"
      - "traefik.backend.loadbalancer.sticky=true"
      - "traefik.frontend.rule=Host:backend.localhost"
      - "traefik.frontend.passHostHeader=true"
      - "traefik.port=80" 

   api:
    image: registry.example.com/api
    labels:
      - "traefik.backend=api"
      - "traefik.backend.buffering.maxRequestBodyBytes=2147483648"
      - "traefik.backend.loadbalancer.sticky=true"
      - "traefik.frontend.rule=Host:api.localhost"
      - "traefik.frontend.passHostHeader=true"
      - "traefik.port=80"

Traefik start but nothing is configured, I can not understand where is the error.

enter image description here


Solution

  • You forgot the network part from the example. You miss both network related labels and the networks itslelf:

      deploy:
        labels:
        - "traefik.docker.network=traefik-network" # for both api and backend
        ...
      networks:
      - "traefik-network" # for traefik, api and backend
      ...
    networks:
      traefik-network:{} # you can also make it external
    

    EDIT : also, on swarm, the labels should be set under the "deploy" section of your service, and not ont the service itself.