'docker service logs' 在 swarm 模式下 'docker service update' 后覆盖和不稳定

'docker service logs' overwriting and unstable after 'docker service update' in swarm mode

我的 docker 服务日志通常工作正常(按时间顺序打印)但是, 执行后:

docker service update --force --image myimageregistry:mytag myservice 

如果我请求日志:

docker service logs myservice

然后我得到了一些日志,但是很多行都丢失了,最后一行与最近的操作不对应。似乎旧日志写在新日志之上,因此最终显示非常混乱。

此外,如果我在更新期间保持另一个终端打开并跟踪日志,则登录该终端是可以的,但如果我之后请求它们,问题是一样的。

当您请求服务日志时 docker service logs $service docker 开始并流式传输所有容器中的所有日志,这些容器仍然通过任务链接到服务,运行 或已停止。 Docker 不会尝试以任何方式清理这些日志,因此多个任务日志最终可能会交错且顺序错误。

如果您特别想要当前进程的日志,您需要首先枚举与服务关联的任务,然后列出其中一项任务的日志:

$ docker service ps traefik_traefik
ID             NAME                                            IMAGE          NODE      DESIRED STATE   CURRENT STATE           ERROR                              PORTS
pwabbqdyucc3   traefik_traefik.n6fz7h5d122hads1rqwmmhgmw       traefik:v2.3   ...

$ docker service logs pwabb
...