Приложение Nodejs в сервисе Docker Swarm, обновление не имеет никакого эффекта - PullRequest
3 голосов
/ 04 апреля 2019

Коротко и просто; как мне обновить реплицированное приложение nodejs в Docker Swarm?

Ожидаемое поведение: после запуска обновления служба получает сигнал некоторой формы, например: SIGINT или SIGTERM

Что на самом деле происходит: ничего ... нет сигналов, нет обновленного сервиса. Я должен удалить сервис и создать его снова с обновленным изображением.

Я использую dockerode для обновления службы. Документация по API докера, для рассматриваемого предмета , повреждена (например, нельзя развернуть подменю: UpdateConfig) ... , что затрудняет понимание если я пропущу какие-либо дополнительные спецификации.

Если я запускаю команду: docker service update <SERVICE> происходит ожидаемое поведение.

1 Ответ

2 голосов
/ 09 апреля 2019

Флаг 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 сигнал из контейнера, но по крайней мере теперь я могу обновить свой сервис

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...