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.
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