如何编写在docker容器中运行的登录.net核心应用程序,以便日志消息显示在 docker logs <container-id>
或Kitematic UI中?
我已经尝试了几乎所有东西,但总是没有来自dotnet应用程序的日志 . 我在NODE.js,nginx,rabbitmq等容器中拥有的所有其他非dotnet应用程序都没有问题 .
这是我已经尝试过的:
-
控制台应用程序(.NET Core)使用
Console.WriteLine
-
使用ILogger接口的ASP.NET Core应用程序(使用支持docker的VS模板后的默认设置)
-
在控制台/ ASP.NET核心应用程序中使用log4net(日志实际上与RollingFileAppender一起使用)与ConsoleAppender
我找不到任何遇到相同问题的人(stackoverflow,google,github问题),所以我想我在这里缺少必要的东西 .
更新1:
这是我目前的设置:
-
Windows 10专业版
-
Docker for Windows 17.12.0-ce
-
docker-compose版本1.18.0,build 8dd22a96
-
运行Linux容器
更新2:
工作Dockerfile的例子(NodeJS app)
FROM node:9-slim
WORKDIR /app
EXPOSE 80
ENV NODE_PATH=/node_modules
ENV PATH=$PATH:/node_modules/.bin
COPY ./MyApp ./
RUN npm install
RUN npm run build
CMD [ "npm", "start" ]
NOT工作Dockerfile的示例(ASP.NET Core,由Visual Studio生成)
FROM microsoft/aspnetcore:2.0 AS base
WORKDIR /app
EXPOSE 80
FROM microsoft/aspnetcore-build:2.0 AS build
WORKDIR /src
COPY *.sln ./
COPY DockerLoggingTest2/DockerLoggingTest2.csproj DockerLoggingTest2/
RUN dotnet restore
COPY . .
WORKDIR /src/DockerLoggingTest2
RUN dotnet build -c Release -o /app
FROM build AS publish
RUN dotnet publish -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "DockerLoggingTest2.dll"]
正如您所看到的,它并没有什么特别之处 . 所以问题必须在.NET Core中,因为所有其他类型的应用程序日志都可以 .
2 回答
这是我怀疑的 . Visual Studio是中间的人,吞下所有日志消息 . 我认为这与在Visual Studio调用的docker-compose命令中的yaml覆盖有关,可能启用所有调试功能 .
看起来后面的文件
obj\Docker\docker-compose.vs.debug.g.yml
负责我遇到的行为 . 当我在没有它的情况下运行此命令时,一切都按预期工作 .谢谢大家的头脑风暴,这导致了这个答案 .
This应该允许您将日志重定向到docker容器日志 .
然后,您可以通过运行该命令来检索日志