Search code examples
dockertraefik

How to use a specific http port in Traefik v1.7?


In order to use sticky session among docker containers, I'm using Traefik v1.7. But I don't change the http port 80 by a specific port e.g. 8081.

It is okay when I use the port 80 in Traefik in the following way:

docker network create mynetwork -d overlay

docker service create --name mynginx --mode replicated --replicas 2 \ 
    --network mynetwork --publish "80:8085" nginx
    
docker service update 
    --label-add "traefik.docker.network=mynetwork" \
    --label-add "traefik.port=8085" \
    --label-add "traefik.frontend.rule=PathPrefix:/" \
    --label-add "traefik.backend.loadbalancer.stickiness=true" \
    mynginx
    
docker service create 
    --name traefik 
    -p8080:80 -p9090:8080 \
    --mount type=bind,source=/var/run/docker.sock,destination=/var/run/docker.sock \
    --mode=global \
    --network mynetwork \
    traefik \
    --docker \
    --docker.swarmmode \
    --docker.watch \
    --web \
    --loglevel=DEBUG

But when I change the port 80 by 8081, Traefik service doesn't work:

docker network create mynetwork -d overlay

docker service create --name mynginx --mode replicated --replicas 2 \ 
    --network mynetwork --publish "8081:8085" nginx
    
docker service update 
    --label-add "traefik.docker.network=mynetwork" \
    --label-add "traefik.port=8085" \
    --label-add "traefik.frontend.rule=PathPrefix:/" \
    --label-add "traefik.backend.loadbalancer.stickiness=true" \
    mynginx
    
docker service create 
    --name traefik 
    -p8080:8081 -p9090:8080 \
    --mount type=bind,source=/var/run/docker.sock,destination=/var/run/docker.sock \
    --mode=global \
    --network mynetwork \
    traefik:v1.7 \
    --docker \
    --docker.swarmmode \
    --docker.watch \
    --web \
    --loglevel=DEBUG

Thank you.


Solution

  • I have solved my issue in the following way and used Traefik v2.3. When access the port 80, Traefik will show the service whoami and when access the port 9086, Traefik will show the service mynginximage2.

    version: "3.8"
    
    services:
      traefik:
        image: traefik:v2.3
        deploy:
          mode: global
        networks:
          - traefik-net
        command:
          #- "--log.level=DEBUG"
          - "--api.insecure=true"
          - "--providers.docker=true"
          - "--providers.docker.exposedbydefault=false"
          - "--entrypoints.web.address=:80"
          - "--entrypoints.mynginximage2_ep.address=:8086"
        ports:
          - 80:80
          - 9086:8086
          - 8080:8080
        volumes:
          - "/var/run/docker.sock:/var/run/docker.sock:ro"
      whoami:
        image: "traefik/whoami"
        deploy:
          replicas: 2
        networks:
          - traefik-net
        labels:
          - "traefik.enable=true"
          - "traefik.http.routers.whoami.entrypoints=web"
          - "traefik.http.routers.whoami.rule=Host(`192.168.0.1`) || Host(`192.168.0.2`)"
          - "traefik.http.services.whoami-service.loadbalancer.server.port=80"
      mynginximage2:
        image: mynginximage2
        deploy:
          replicas: 2
        networks:
          - traefik-net
        #ports:
        #  - 9080:8086
        labels:
          - "traefik.enable=true"
          - "traefik.http.routers.mynginximage2.entrypoints=mynginximage2_ep"
          - "traefik.http.routers.mynginximage2.rule=Host(`192.168.0.1`) || Host(`192.168.0.2`)"
          - "traefik.http.services.mynginximage2-service.loadbalancer.server.port=8086"      
    networks:
      traefik-net:
        external: true
        name: traefik-net