如何通过docker stack实现零宕机时间

问题描述 投票:0回答:1

Docker更新了容器,但是网络注册需要10分钟才能完成,因此,在注册新容器时,该页面返回502,因为内部网络仍指向旧容器。更新新容器后,如何将旧容器的移除延迟10分钟左右?理想情况下,我想使用docker stack推送此配置,但我将尽一切努力。我还应注意,由于我被迫使用的安全软件包的某些限制,我现在无法使用副本。

version: '3.7'
services:
  xxx:
    image: ${xxx}/com.xxx:${xxx}
    environment:
      - SERVICE_NAME=xxx
      - xxx
      - _xxx
      - SPRING_PROFILES_ACTIVE=${xxx}
    networks:
      - xxx${xxx}
    healthcheck:
      interval: 1m
    deploy:
      mode: replicated
      replicas: 1
      resources:
        limits:
          cpus: '3'
          memory: 1024M
        reservations:
          cpus: '0.50'
          memory: 256M
      labels:
        - com.docker.lb.hosts=xxx${_xxx}.xxx.com
        - jenkins.url=${xxx}
        - com.docker.ucp.access.label=/${xxx}/xxx
        - com.docker.lb.network=xxx${_xxx}
        - com.docker.lb.port=8080
        - com.docker.lb.service_cluster=${xxx}
        - com.docker.lb.ssl_cert=xxx.cert
        - com.docker.lb.ssl_key=xxx.key
        - com.docker.lb.redirects=http://xxx${_xxx}.xxx.com/xxx,https://xxx${_xxx}.xxx.com/xxx
      restart_policy:
        condition: any
        delay: 5s
        max_attempts: 3
        window: 120s
      update_config:
        parallelism: 1
        delay: 10s
        order: start-first
        failure_action: rollback
      rollback_config:
        parallelism: 0
        order: stop-first
    secrets:
      - ${xxx}

networks:
  xxx${_xxx}:
    external: true

secrets:
  ${xxx}:
    external: true
  xxx.cert:
    external: true
  xxx.key:
    external: true
docker docker-swarm docker-stack
1个回答
0
投票

使用适当的运行状况检查-参见此处的参考:https://docs.docker.com/compose/compose-file/#healthcheck

所以:

  1. 您需要定义适当的测试,以了解新容器何时完全用完(在testhealthcheck指令内)。
  2. 使用start_period指令指定您的10(或大约)分钟的方式-否则,Docker Swarm只会杀死您的新容器,并且永远不会启动它。

基本上,一旦您获得正确的健康检查,就可以解决您的问题。

© www.soinside.com 2019 - 2024. All rights reserved.