【问题标题】:How to restart a Docker service in global mode (non-replicated)?如何以全局模式(非复制)重启 Docker 服务?
【发布时间】:2018-10-16 03:30:01
【问题描述】:

在 Docker Swarm 模式下,如何重启单个全局服务?甚至可能吗?我知道您可以将复制的服务缩放到零,然后再回到 1+,但似乎没有任何文档说明如何对全局服务产生相同的效果。

我正在更新我的 SSL 证书,因此我只想重新启动我们的反向代理,而不是重新启动我们的整个应用程序(通过重新启动 docker 服务)。

文档只是提到了you cannot scale global services

使用 scale 命令,您可以将一个或多个复制服务向上或向下缩放到所需的副本数。此命令不能应用于全局模式的服务。

【问题讨论】:

    标签: docker docker-swarm


    【解决方案1】:

    您可以强制滚动更新服务,无论是全局计划的还是使用docker service update --force ${service_name} 复制的。这是一个示例撰写文件:

    version: '3'
    
    services:
      busybox-global:
        image: busybox
        command: tail -f /dev/null
        deploy:
          mode: global
    
      busybox-replicated:
        image: busybox
        command: tail -f /dev/null
        deploy:
          replicas: 2
    

    验证它已经开始:

    $ docker ps
    CONTAINER ID        IMAGE                               COMMAND                  CREATED              STATUS      PORTS                            NAMES
    917aefdc910b        busybox:latest                      "tail -f /dev/null"      50 seconds ago       Up 31 seconds                                       sched_busybox-global.q44zx0s2lvu1fdduk800e5ini.hzn6jnzh7x539timamphzzw8a
    7187fbbde0da        busybox:latest                      "tail -f /dev/null"      About a minute ago   Up 31 seconds                                       sched_busybox-replicated.1.i4nm7lpr1spmf0aorh1dtcqrc
    f04a0062b088        busybox:latest                      "tail -f /dev/null"      About a minute ago   Up 31 seconds                                       sched_busybox-replicated.2.oc6zn0ziqg9wyzofokek8eb24
    
    $ docker service ls
    ID                  NAME                       MODE                REPLICAS            IMAGE     PORTS
    gto0d5a6betb        sched_busybox-global       global              1/1                 busybox:latest 
    yfq5mne0qhtj        sched_busybox-replicated   replicated          2/2                 busybox:latest 
    
    $ docker service ps sched_busybox-global
    ID                  NAME                                             IMAGE               NODE                DESIRED STATE       CURRENT STATE            ERROR               PORTS
    hzn6jnzh7x53        sched_busybox-global.q44zx0s2lvu1fdduk800e5ini   busybox:latest      bmitch-asusr556l    Running           Running 49 seconds ago
    

    强制滚动更新:

    $ docker service update --force sched_busybox-global
    sched_busybox-global
    overall progress: 1 out of 1 tasks
    q44zx0s2lvu1: running   [==================================================>]
    verify: Service converged
    
    $ docker service ps sched_busybox-global                                
    ID                  NAME                                                 IMAGE               NODE                DESIRED STATE       CURRENT STATE             ERROR               PORTS
    zcfocrfjvvux        sched_busybox-global.q44zx0s2lvu1fdduk800e5ini       busybox:latest      bmitch-asusr556l    Running             Running 7 seconds ago
    hzn6jnzh7x53         \_ sched_busybox-global.q44zx0s2lvu1fdduk800e5ini   busybox:latest      bmitch-asusr556l    Shutdown            Shutdown 10 seconds ago
    
    $ docker ps -a
    CONTAINER ID        IMAGE                               COMMAND                  CREATED              STATUS                            PORTS                            NAMES
    3c5fe0f79e3d        busybox:latest                      "tail -f /dev/null"      About a minute ago   Up About a minute                                                  sched_busybox-global.q44zx0s2lvu1fdduk800e5ini.zcfocrfjvvuxz6tkge0pn0bq2
    917aefdc910b        busybox:latest                      "tail -f /dev/null"      3 minutes ago        Exited (137) About a minute ago                                    sched_busybox-global.q44zx0s2lvu1fdduk800e5ini.hzn6jnzh7x539timamphzzw8a
    7187fbbde0da        busybox:latest                      "tail -f /dev/null"      3 minutes ago        Up 2 minutes                                                       sched_busybox-replicated.1.i4nm7lpr1spmf0aorh1dtcqrc
    f04a0062b088        busybox:latest                      "tail -f /dev/null"      3 minutes ago        Up 2 minutes                                                       sched_busybox-replicated.2.oc6zn0ziqg9wyzofokek8eb24
    

    如果我强制更新复制的服务,同样会起作用。

    【讨论】:

    • 是的,做到了。问题是我假设 docker service update 不会在图像相同的情况下重新启动服务。
    • 通常不会,这就是为什么你需要 force 选项来改变这种行为。
    猜你喜欢
    • 2020-07-21
    • 1970-01-01
    • 2021-09-30
    • 1970-01-01
    • 2014-08-13
    • 2013-04-09
    • 1970-01-01
    • 1970-01-01
    • 2012-12-27
    相关资源
    最近更新 更多