简短如何在docker swarm中更新复制的nodejs应用程序?
预期的行为:触发更新后,服务将接收某种形式的信号,例如:SIGINT或SIGTERM
实际发生的事情:什么都没有…没有信号,没有更新的服务.我必须删除该服务,然后使用更新的图像再次创建它.
我正在使用dockerode更新服务. Docker API的文档@L_301_1@已损坏(例如,一个子菜单无法展开子菜单:UpdateConfig)…使得很难知道我是否缺少任何其他规范.
如果我运行命令:docker service update< SERVICE>发生预期的行为.
最佳答案
每次更新时,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信号,但至少现在我可以更新服务了