在 JetBrains Rider 中调试从 docker compose 运行的 .Net Core 3 应用程序

Posted

技术标签:

【中文标题】在 JetBrains Rider 中调试从 docker compose 运行的 .Net Core 3 应用程序【英文标题】:Debuging a .Net Core 3 app run from docker compose in JetBrains Rider 【发布时间】:2019-12-30 10:41:55 【问题描述】:

我正在尝试运行从 docker-compose 本地构建的多容器服务。如果我从 dockerfile 调试服务,则调试器可以正常工作,但是当我使用 docker-compose 进行调试并尝试评估对象时,它不起作用。我的项目使用 .net core 3

特别是我正在查看启动类。当我在构造函数上放置断点时,我可以评估配置对象。但我感兴趣的领域是 Configure 方法。当我在代码检查环境的位置放置断点时,我收到以下消息。

当前上下文中不存在名称“env”

当我直接从我的 dockerfile 调试时,我可以成功地评估这个对象。但是通过使用 docker-compose 文件进行调试,我能够完全调试拆分为多个服务的整个应用程序。

是我遗漏了什么或者我在什么地方做错了吗?

我的代码的相关摘录如下。

public class Startup

   private IConfiguration Configuration  get; 
    
   public Startup(IConfiguration configuration)
   
        Configuration = configuration;
   

   public void ConfigureServices(IServiceCollection services)
   
       ....
   

   public void ConfigureContainer(ContainerBuilder builder)
   
       ...
   

  public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
  
      if (env.IsDevelopment())
      
          ...
          context.Database.Migrate();
      

      app.Run(async (context) =>
      
          await context.Response.WriteAsync("Hello World!");
      );
    
  

到目前为止,我已经尝试了一些方法来解决这个问题。这些已确保我更新了 Rider,使用了 .Net Core 3 sdk docker 映像,并确保 dotnet build 命令使用了 Debug 配置。

我读到的其他一些内容似乎与 VS 在从 docker-compose 构建时所做的优化更相关,所以我不确定这些内容是否适用于 Rider。

我的 dockerfile 是

FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS base
WORKDIR /app
ENV ASPNETCORE_ENVIRONMENT Development
EXPOSE 85
EXPOSE 443

FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
WORKDIR /src
COPY EventService/EventService.csproj EventService/
RUN dotnet restore "EventService/EventService.csproj"
COPY . .
WORKDIR "/src/EventService"
RUN dotnet build "EventService.csproj" -c Debug -o /app/build

FROM build AS publish
RUN dotnet publish "EventService.csproj" -c Debug -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "EventService.dll"]

我的 docker-compose 是

version: '3.4'

services:
  eventapi:
    image: $DOCKER_REGISTRY-eventapi
    build:
      context: .
      dockerfile: EventApi/Dockerfile
    networks:
      - backend

  eventservice:
    image: $DOCKER_REGISTRY-eventservice
    build:
      context: .
      dockerfile: EventService/Dockerfile
    networks:
      - backend
    depends_on:
      - sql.db

  sql.db:
    image: "microsoft/mssql-server-linux:2017-latest"
    environment:
      SA_PASSWORD: "myBigDevPassword!"
      ACCEPT_EULA: "Y"
    ports:
      - "1433:1433"
    networks:
      - backend
networks:
  backend: 

【问题讨论】:

【参考方案1】:

这最终是一个简单的修复。我只需要将 Rider 更新到最新版本。首次作为 Rider 中的功能发布时,有一个错误导致此问题。

【讨论】:

嘿伙计有点话题。但是你介意分享你的运行/调试配置吗?我正在尝试调试 docker 文件,但出现了一些错误,我看到我们有非常相似的 dockerfiles。我的问题:***.com/questions/60886210/…

以上是关于在 JetBrains Rider 中调试从 docker compose 运行的 .Net Core 3 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

JetBrains Rider 中 Visual Studio 的“无需调试即可启动”?

JetBrains Rider - 如何从断点中排除某种类型的异常

JETBRAINS RIDER:剖析 Rider 2017.3新功能

使用 Dockerfile 使用 Jetbrains Rider 调试 .NET Core 应用程序

调试在 JetBrains Rider 中不起作用的 React Typescript 项目

JetBrains Rider lua怎么连上Unity调试