'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
...
我的 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
...