Docker Swarm API 客户端具有以下服务元信息:
Meta.UpdatedAt
这是最后一次用户启动的时间戳update
(例如更改服务配置)还是服务更改的时间戳,即使是 Docker Swarm 也会执行?
例如,如果我的 swarm 服务有 5 个任务分布在集群中,然后 Docker 出于某种原因将一个任务从一个节点移动到另一个节点(因此服务配置不会更改);它会更新这个字段吗?
Docker Swarm API 客户端具有以下服务元信息:
Meta.UpdatedAt
这是最后一次用户启动的时间戳update
(例如更改服务配置)还是服务更改的时间戳,即使是 Docker Swarm 也会执行?
例如,如果我的 swarm 服务有 5 个任务分布在集群中,然后 Docker 出于某种原因将一个任务从一个节点移动到另一个节点(因此服务配置不会更改);它会更新这个字段吗?
简短的回答:不,这不会。
如果你看源代码,是通过调用meta.UpdatedAt
的方法改变的。对于服务,处理这个的方法是,它链接到cli 命令。因此,从技术上讲,仅在您使用.touchMeta
update
UpdateService
docker service update
meta.UpdatedAt
docker service update
您可以通过在本地计算机或集群上遵循此方案来快速测试:
$ docker service create --name redis --replicas 5 redis
$ docker service inspect --format='{{.Meta.UpdatedAt}}' redis
2017-01-07 15:16:14.910287822 +0000 UTC
$ docker rm -f <some-redis-task-id>
# Swarm should re-schedule the forced removed task onto another node
$ docker service inspect --format='{{.Meta.UpdatedAt}}' redis
2017-01-07 15:16:14.910287822 +0000 UTC
该meta.UpdatedAt
字段应保持不变。
现在调用docker service update redis --replicas 10
,您应该会看到新的时间戳。