docker - 在 Docker Swarm 副本上使用 Traefik 进行 session 持久化

标签 docker docker-compose docker-swarm traefik docker-swarm-mode

我尝试使用 traefik 在 dockers-swarm 上实现粘性 session ,但无法在同一台计算机上的两个副本上实现 session 持久性。 在我的 docker-compose.yml 中,我添加了 traefik 标签并添加了负载均衡器。下面是我的 docker-compose.yml,(虽然这里的缩进可能看起来不正确,但在实际项目中是正确的)

version: '3'

   services:
      web:
        image: php:7.2.11-apache-stretch
        ports:
            - "8080:80"
        volumes:
            - ./code/:/var/www/html/hello/
       stdin_open: true
       tty: true
       deploy:
        mode: replicated
        replicas: 2
        restart_policy:
            condition: any
        update_config:
            delay: 2s
        labels:
            - "traefik.docker.network=docker-test_privnet"
            - "traefik.port=80"
            - "traefik.backend.loadbalancer.sticky=true"
            - "traefik.frontend.rule=PathPrefix:/hello"

    networks:
        - privnet
loadbalancer:
    image: traefik
    command: 
        --docker \
        --docker.swarmmode \
        --docker.watch \
        --web \
        --loglevel=DEBUG
    ports:
        - 80:80
        - 9090:8080
    volumes:
    - /var/run/docker.sock:/var/run/docker.sock
    deploy:
        restart_policy:
            condition: any
        mode: replicated
        replicas: 1
        update_config:
            delay: 2s
        placement:
            constraints: [node.role == manager]

    networks:
        - privnet
networks:
    privnet:
        external: true

我错过了什么吗?

最佳答案

一些事情。

  1. .stickydeprecated支持traefik.backend.loadbalancer.stickiness=true
  2. 当您只有一个网络连接到该服务时,我认为您不需要使用 traefik.docker.network 设置网络。
  3. 确保您使用使用 Cookie 的工具进行测试,这就是粘性 session 保持粘性的方式。如果使用curl,请务必使用-c-b,如this example 中所示。 .
  4. 我使用了我的 test Swarm setup 中的投票应用程序示例并向“投票”服务添加了粘性 session ,它在单个节点上对我有用。如果使用多节点集群,您需要在多个集群节点前面设置负载均衡才能启用粘性。

关于docker - 在 Docker Swarm 副本上使用 Traefik 进行 session 持久化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53230548/

相关文章:

docker - Docker 容器的 Nginx 反向代理

jenkins - 使用 Jenkins 在 Docker 容器中运行测试

typescript - Monorepo中的后端 typescript :如何获取Docker的依赖关系?

docker - 无法在 Compose : ERROR: Network declared as external, 中使用现有网络但找不到

docker - 有没有一种方法可以阻止使用dockerfile/docker-compose的用户假定容器的root用户身份?

docker - 使用env vars和GitlabCI构建一个React Docker镜像

c# - 在 Docker 上运行 .NET framework console-app 服务

Docker : Difference in PID values and visible processes 中的 Java 9 ProcessHandle API

Docker swarm - 如何在 swarm 中的每个节点上复制服务

docker - 堆栈服务在特定接口(interface)上公开端口?