在 Docker 个容器重新启动后保留日志

Persist log across Docker container restarts

所以我有一个微服务 运行 作为 .NET Core 下的 Docker 容器并记录到 Azure 上的 Application Insights,因为它将从 EventHub 获取的大量数据写入 SQL 服务器.

每隔一段时间我就会收到一个未处理的 SqlException,它似乎是在后台线程上抛出的,这意味着我无法捕获并处理它,也无法修复此错误。

解决方法是将重启策略设置为始终并重启服务。这很好用,但现在我无法在 Application Insights 中跟踪此异常。

我想未处理的异常是由 CLR 写入 stderr,因此它出现在 Docker 日志中并带有一些 grepping,但是有没有办法在启动时检查它并随后将其记录到应用程序洞察力,以便我无需登录 Swarm 集群和 grep 即可发现它以获取重启信息?

要保留日志,

方法一

将 docker 日志目录装载到主机中。

示例:

docker 运行 -name Container_1 -v /host_dir/logs:/var/log/app docker_image:version

Docker 容器将在 /var/log/app 中写入日志 directory.Now 日志也会在 docker 重启后持久保存在主机的 /host_dir/logs 目录中。

方法二

在 docker 中配置日志记录驱动程序,例如 syslog 或 fluentd。您可以查看https://docs.docker.com/engine/admin/logging/overview/进行配置。