访问 Docker 内的 .NET Core 控制台应用程序生成的日志文件

问题描述 投票:0回答:2

我对 Docker 世界完全陌生,无论我在哪里搜索它,似乎都没有适用的解决方案。我知道很多问题都涉及与日志记录相关的同一问题,但我找不到一个基本的、详细的解决方案来帮助我自己应用它。

tldr;

我当前有一个 .NET Core 5.0 控制台应用程序,它使用

log4net
在本地目录中创建日志文件。我想传输应用程序以通过
Windows-based
docker 容器运行,并在运行时/运行后访问
log
文件以查看其结果。

我看到了 docker 文档 | Volumes 但无法理解如何定义并稍后访问日志文件。

这是这样做的方法吗?我应该在我的应用程序中以不同的方式定义什么?

docker logging .net-core visual-studio-2019
2个回答
2
投票

可能这不是要更改应用程序中的任何内容,您只需要确定容器中存储日志的目录,并在主机部分附加一个卷或将其绑定到其上。因此,您可以:

  • 创建一个卷,并在“docker run”期间将其与存储日志的容器内的目录关联起来。可以使用 Docker 来管理卷,这使其成为首选。通过利用它们,您可以例如输入“docker检查某些卷名称”以找出主机文件系统中您可以看到该卷中的文件的位置,在本例中是您的日志。

  • 进行绑定挂载,这意味着您正在将主机中的目录映射到容器中的目录。此选项非常简单,但您会失去所有卷的功能。

带音量的路径

创建 Docker 卷。

docker volume create logs-from-net-app

检查该卷以找出在哪里可以找到其内容。

docker volume inspect logs-from-net-app

将其固定到容器上。

docker run --mount type=volume,source=logs-from-net-app,target=//c/path/to/logs "hello-world"

带有安装绑定的路径

在 docker run 期间进行绑定挂载

docker run --mount type=bind,source=C:\logs,target=//c/path/to/logs "hello-world"

0
投票

我想扩展Michal Rosenbaum的答案。

如果您使用.NET Core,您可以在

DockerFile
中定义卷,如下所示:

FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
VOLUME "/application-logs"
WORKDIR /app
EXPOSE 80
EXPOSE 443

您可以使用

launchSettings.json
属性在
Docker
配置文件中的
DockerfileRunArguments
中定义安装,如下所示

    "Docker": {
      "commandName": "Docker",
      "launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}/swagger",
      "environmentVariables": {
        "ASPNETCORE_URLS": "https://+:443;http://+:80",
        "PROFILE": "DOCKER"
      },
      "publishAllPorts": true,
      "useSSL": true,
      "httpPort": 32003,
      "sslPort": 32103,
      "DockerfileRunArguments": "-v c:\\application-logs\\myProject:/application-logs"
    }

application-logs
名称与我的
log4net.config
文件中的名称相匹配,如下所示

<log4net>
  <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
    <file value="/application-logs/myProject-" />
    <appendToFile value="true" />
    <rollingStyle value="Composite" />
    <datePattern value="yyyy-MM-dd'.txt'" />
    <maxSizeRollBackups value="10" />
    <maximumFileSize value="10MB" />
    <staticLogFileName value="false" />
    <layout type="Roostr.Logic.Logging.EnhancedFormatter">
      <conversionPattern value="%date %5level %logger.%method [%line] - Message: %message%newline" />
    </layout>
  </appender>
  <root>
    <level value="ALL" />
    <appender-ref ref="RollingLogFileAppender" />
  </root>
</log4net>
© www.soinside.com 2019 - 2024. All rights reserved.