docker日志从.NET Core控制台应用程序输出
我是否应该使用docker logs命令从我的.NET核心控制台应用程序Docked(linux映像)中查看控制台输出(console.WriteLine)?是。如果使用默认日志驱动程序,则可以看到写入stdout和stderr的日志 默认情况下,docker日志显示命令的STDOUT和STDERRdocker日志从.NET Core控制台应用程序输出,docker,logging,.net-core,Docker,Logging,.net Core,我是否应该使用docker logs命令从我的.NET核心控制台应用程序Docked(linux映像)中查看控制台输出(console.WriteLine)?是。如果使用默认日志驱动程序,则可以看到写入stdout和stderr的日志 默认情况下,docker日志显示命令的STDOUT和STDERR 发现在调试模式下,应用程序只会写入调试输出控制台。因此,如果在本地调试容器上运行docker日志,则将什么都没有。如果在释放模式下运行容器,则当运行要扩展应答的docker日志时,日志将出现 正如他
发现在调试模式下,应用程序只会写入调试输出控制台。因此,如果在本地调试容器上运行
docker日志
,则将什么都没有。如果在释放模式下运行容器,则当运行要扩展应答的docker日志时,日志将出现
正如他所说:
- 使用VS调试:Docker日志不起作用
- 在没有VS:Docker日志的情况下构建和启动映像
让我们看看容器,了解发生了什么
基本知识:docker日志将从定义的入口点启动的流程的stdout和stderr馈送。通过Dockerfile
和/或docker compose.yml
定义
docker构建后的“常规docker用例”,无调试
在通过docker run创建映像(没有VS)并启动它之后,它看起来是这样的
$ docker build -t my-project:dev Dockerfile .
$ docker inspect -f '{{json .Config.Entrypoint}}' my-project:dev
["dotnet","MyProject.dll"]
入口点是我们的应用程序,因此docker将读取应用程序的stdout和stderr并创建日志
调试
简称:
docker映像入口点是tail-f/dev/null
->没有docker日志,从来没有。
容器在应用程序不运行的情况下运行后,VS Debug通过docker exec MyAppContainer“sh-c vsdbg…”启动应用程序。
->所有输出(stdout、stderr、Debug)都将转到VS
tldr
这里很有趣;)
VS Debug将创建一个容器,如下所示:
docker inspect -f '{{json .Config.Entrypoint}}' MyProjectName
["tail","-f","/dev/null"]
docker exec MyAppContainer 'sh -c vsdbg --interpreter=vscode'
allready提到了tail-f/dev/null
entrypoint。
Docker将从此进程中读取>因此无任何内容。
实际上,我们的应用程序根本不是通过常规docker机制启动的
那么,应用程序调试sesseion是如何启动的呢?
让我们连接到图像并进行查看
root@2e65795bcd7e:/app# pstree -p 0 -A -T -a
?,
|-sh,1394 -c...
| `-vsdbg,1401 --interpreter=vscode
| `-dotnet,1414 --additionalProbingPath /root/.nuget/packages --additionalProbingPath /root/.nuget/fallbackpackages /app/bin/Debug/net5.0/MyApp.dll
`-tail,1 -f /dev/null
底部是我们开始的入口点tail-f/dev/null
顶部是一个sh-csvsdbg。。。网络。。。MyApp.dll
。
当您停止并开始调试时,您可以看到这个过程是如何消失和重新出现的
所以VS做了这样的事情:
docker inspect -f '{{json .Config.Entrypoint}}' MyProjectName
["tail","-f","/dev/null"]
docker exec MyAppContainer 'sh -c vsdbg --interpreter=vscode'
这反过来又会启动你的应用程序作为一个孩子
dotnet --additionalProbingPath /root/.nuget/packages --additionalProbingPath /root/.nuget/fallbackpackages /app/bin/Debug/net5.0/MyApp.dll
是的,您应该看到itLogs没有显示,因为容器主进程是“tail-f/dev/null”,这很奇怪,但我看不到这个输出。若我正在调试应用程序,我可以在VS调试控制台中看到输出。如果我在没有调试的情况下运行,我可以在VS Docker控制台中看到输出。但是,如果我从docker命令运行应用程序,我看不到输出。我应该提到,这是docker在windows上运行,linux作为主机系统(我认为是Hyper-V机器)。你能在这里发布你的docker文件吗?这是我的docker文件:来自microsoft/dotnet:2.0-runtime ARG source WORKDIR/app COPY${source:-obj/docker/publish}。ENTRYPOINT[“dotnet”,“DockerOutputTest.dll”]ASP.NETMVC应用程序使用的标准版本是什么?