docker swarm服务中的Nodejs应用程序,更新无效

时间:2019-04-04 09:57:27

标签: node.js docker

简短易懂; 如何在Docker群中更新复制的nodejs应用程序?

预期的行为:一旦触发更新,服务就会收到某种形式的信号,例如:SIGINTSIGTERM

实际发生的事情:什么都没有...没有信号,没有更新的服务。我必须删除该服务,然后使用更新的图像再次创建它。

我正在使用dockerode来更新服务。 docker API的文档of the subject in question损坏了((例如,无法展开子菜单:UpdateConfig)... ,这使我很难知道我是否我错过了任何其他规范。

如果我运行命令:docker service update <SERVICE>会发生预期的行为。

1 个答案:

答案 0 :(得分:2)

ForceUpdate标志必须在每次更新时增加一...,以便在不对映像进行版本控制时进行更新。

    const
    serviceOptions    = { ... },
    service           = this.docker.getService(serviceName),
    serviceInspected  = await this.serviceInspector.inspectService(serviceName)

    serviceOptions.registryAuthFrom         = 'spec'
    // if we do not specify the correct version, we can not update the service
    serviceOptions.version                  = serviceInspected.Version.Index
    // it's not documented by docker that we need to increase this force update flag by one, each time we attempt to update...
    serviceOptions.TaskTemplate.ForceUpdate = serviceInspected.Spec.TaskTemplate.ForceUpdate + 1

    const response = await service.update(serviceOptions)
    response.output.Warnings && this.log.info(data.output.Warnings)

仍然无法记录来自容器的SIGTERM信号,但至少现在我可以更新服务了