我对 Docker 世界完全陌生,无论我在哪里搜索它,似乎都没有适用的解决方案。我知道很多问题都涉及与日志记录相关的同一问题,但我找不到一个基本的、详细的解决方案来帮助我自己应用它。
tldr;
我当前有一个 .NET Core 5.0 控制台应用程序,它使用
log4net
在本地目录中创建日志文件。我想传输应用程序以通过 Windows-based
docker 容器运行,并在运行时/运行后访问 log
文件以查看其结果。
我看到了 docker 文档 | Volumes 但无法理解如何定义并稍后访问日志文件。
这是这样做的方法吗?我应该在我的应用程序中以不同的方式定义什么?
可能这不是要更改应用程序中的任何内容,您只需要确定容器中存储日志的目录,并在主机部分附加一个卷或将其绑定到其上。因此,您可以:
创建一个卷,并在“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"
我想扩展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>