简短易懂; 如何在Docker群中更新复制的nodejs应用程序?
预期的行为:一旦触发更新,服务就会收到某种形式的信号,例如:SIGINT
或SIGTERM
实际发生的事情:什么都没有...没有信号,没有更新的服务。我必须删除该服务,然后使用更新的图像再次创建它。
我正在使用dockerode来更新服务。 docker API的文档of the subject in question损坏了((例如,无法展开子菜单:UpdateConfig
)... ,这使我很难知道我是否我错过了任何其他规范。
如果我运行命令:docker service update <SERVICE>
会发生预期的行为。
答案 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
信号,但至少现在我可以更新服务了