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

Cec*_*her 6 unhandled-exception docker .net-core docker-swarm

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

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

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

我认为未处理的异常是由 CLR 写入 stderr 的,因此它会通过一些 grep 出现在 Docker 日志中,但是有没有办法在启动时检查此异常,然后将其记录到 Application Insights,以便我可以在不登录的情况下发现它Swarm 集群和 grep 来获取重启信息?

Gir*_*tra 0

要保留日志,

方法一

将 docker log 目录挂载到主机中。

例子:

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

Docker 容器会将日志写入 /var/log/app 目录中。现在,即使 docker 重新启动,日志也将保留在主机的 /host_dir/logs 目录中。

方法2

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