【问题标题】:Docker daemon fails to process logsDocker 守护进程无法处理日志
【发布时间】:2020-08-14 13:31:45
【问题描述】:

Docker daemon 无法解析 json 日志并抛出 unexpected EOF 错误。我们正在调查问题的根本原因。

环境:

  • Debian 4.9.189-3+deb9u2
  • Docker 引擎 19.03.5

Docker 守护进程日志:

Apr 29 14:31:05 Prod-IS dockerd[30810]: time="2020-04-29T14:31:05.070677515+02:00" level=warning msg="got error while decoding json" error="unexpected EOF" retries=345
Apr 29 14:31:05 Prod-IS dockerd[30810]: time="2020-04-29T14:31:05.070695689+02:00" level=warning msg="got error while decoding json" error="unexpected EOF" retries=346
Apr 29 14:31:05 Prod-IS dockerd[30810]: time="2020-04-29T14:31:05.070712630+02:00" level=warning msg="got error while decoding json" error="unexpected EOF" retries=347
Apr 29 14:31:05 Prod-IS dockerd[30810]: time="2020-04-29T14:31:05.070732299+02:00" level=warning msg="got error while decoding json" error="unexpected EOF" retries=348
Apr 29 14:31:05 Prod-IS dockerd[30810]: time="2020-04-29T14:31:05.070755016+02:00" level=warning msg="got error while decoding json" error="unexpected EOF" retries=349
Apr 29 14:31:05 Prod-IS dockerd[30810]: time="2020-04-29T14:31:05.070773699+02:00" level=warning msg="got error while decoding json" error="unexpected EOF" retries=350

Docker 守护进程配置

"log-driver": "json-file",
"log-opts": {
  "mode": "non-blocking",
  "max-size": "500m",
  "max-file": "3"
}

在 docker 写入日志的分区上有可用的存储空间。

非常欢迎您对此事的见解。

【问题讨论】:

  • 我们同时禁用了 docker 日志,containerd 进程的 CPU 使用率恢复正常。
  • 你无法找出根本原因@Mysteryos?
  • @PaulRichter 我们没有。日志仍然被禁用。它在debian操作系统上。我们正在考虑迁移到 Ubuntu。
  • 关于这种情况的更新:我们发现部署的应用程序容器正在输出错误的 JSON 日志,必须更正后者。减轻此错误的最佳方法是保留微小的 docker 日志文件,例如 max-size = 10m,直到找到罪魁祸首。

标签: json docker logging debian daemon


【解决方案1】:

上述问题将导致 docker(版本

要修复日志和 CPU 使用率,您必须截断所有容器日志(因为我们无法确定哪个容器的日志有问题)。仅当您的日志为 json 格式时才有效:

truncate -s 0 /var/lib/docker/containers/*/*-json.log

请参阅 Andre 的答案以获得永久修复。

【讨论】:

    【解决方案2】:

    Issue=Docker Engine Error json-file: 修复偶发的意外 EOF 错误

    我花了一些时间研究并尝试在 docker 中查找错误 日志。

    docker 引擎 20.10.5 中存在一个错误,该版本是在 docker 中运行的版本。 Github PR 解决了这个问题。 https://github.com/moby/moby/pull/42104

    我在运行时发现错误

    $ journalctl -u docker.service
    level=warning msg="got error while decoding json" error="unexpected EOF" retries=19999
    

    用于日志的 Docker 驱动程序有一个错误,它无法处理某些日志格式。然后,该错误会用重试消息淹没系统日志。这种情况会产生非常烦人的 CPU 负载。

    Docker 引擎最新版本是 20.10.7。该问题已在 Docker 引擎 20.10.6 https://docs.docker.com/engine/release-notes/#20106987654322@发布版本中修复

    【讨论】: