Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
docker日志从.NET Core控制台应用程序输出_Docker_Logging_.net Core - Fatal编程技术网

docker日志从.NET Core控制台应用程序输出

docker日志从.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 logs命令从我的.NET核心控制台应用程序Docked(linux映像)中查看控制台输出(console.WriteLine)?

是。如果使用默认日志驱动程序,则可以看到写入stdout和stderr的日志

默认情况下,docker日志显示命令的STDOUT和STDERR


发现在调试模式下,应用程序只会写入调试输出控制台。因此,如果在本地调试容器上运行
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应用程序使用的标准版本是什么?