首页 文章

登录Docker容器的ASP.NET Core / .NET Core Console应用程序

提问于
浏览
1

如何编写在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 回答

  • 2

    这是我怀疑的 . Visual Studio是中间的人,吞下所有日志消息 . 我认为这与在Visual Studio调用的docker-compose命令中的yaml覆盖有关,可能启用所有调试功能 .

    docker-compose  -f "docker-compose.yml" -f "docker-compose.override.yml" -f "obj\Docker\docker-compose.vs.debug.g.yml" -p dockercompose2788718473649893946 up -d --force-recreate --remove-orphans
    

    看起来后面的文件 obj\Docker\docker-compose.vs.debug.g.yml 负责我遇到的行为 . 当我在没有它的情况下运行此命令时,一切都按预期工作 .

    谢谢大家的头脑风暴,这导致了这个答案 .

  • 0

    This应该允许您将日志重定向到docker容器日志 .

    然后,您可以通过运行该命令来检索日志

    docker logs [container_id_or_container_name] >> logfile

相关问题