使用 Dockerfile 使用 Jetbrains Rider 调试 .NET Core 应用程序
Posted
技术标签:
【中文标题】使用 Dockerfile 使用 Jetbrains Rider 调试 .NET Core 应用程序【英文标题】:Debugging .NET Core application with Jetbrains Rider using Dockerfile 【发布时间】:2019-12-21 11:35:01 【问题描述】:我正在尝试使用 Dockerfile 在调试配置中运行 .NET Core WebApi 项目。我已经使用 Rider 中的模板(带有 ValuesController 的模板)创建了 api 应用程序,创建了如下所示的 dockerfile。从常规启动配置文件和 dockerfile 运行应用程序而不进行调试都可以正常工作。从常规启动配置文件进行调试工作正常,但是当我尝试使用 dockerfile 运行调试配置时出现错误:
/riderDebugger/runtime.sh: exec: line 40: /riderDebugger/linux-x64/mono/bin/mono-sgen: not found
。我可以看到 Rider 在运行调试配置时添加了卷绑定 /riderDebugger
和 /riderLogs
,已经检查了 /riderDebugger
的主机路径是否包含 runtime.sh
正在尝试运行的文件。
我也无法使用命令覆盖运行从下面的 dockerfile 创建的映像,例如使用命令 docker image build -t example-api-manual --no-cache .
创建映像并使用 docker container run -it --rm example-api-manual sh
运行它不会启动 sh
而是运行映像默认命令就像没有命令覆盖一样。因此,我什至无法进入容器并检查这些卷绑定出了什么问题。
我正在使用 macOS Catalina 10.15.2 和 JetBrains Rider 2019.3.1。
Dockerfile:
FROM mcr.microsoft.com/dotnet/core/sdk:2.2-alpine AS build
WORKDIR /app
COPY *.csproj ./
RUN dotnet restore
COPY ./. ./
WORKDIR /app
RUN dotnet publish -c Release -o out
FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-alpine AS runtime
WORKDIR /app
COPY --from=build /app/out ./
ENTRYPOINT [ "dotnet", "ExampleApi.dll" ]
【问题讨论】:
【参考方案1】:alpine 映像当前无法与内部 Rider docker 调试器一起使用。请使用 Debian 映像。 只需删除 -alpine 标签就可以了:-)
FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build
WORKDIR /app
COPY *.csproj ./
RUN dotnet restore
COPY ./. ./
WORKDIR /app
RUN dotnet publish -c Release -o out
FROM mcr.microsoft.com/dotnet/core/aspnet:2.2 AS runtime
WORKDIR /app
COPY --from=build /app/out ./
ENTRYPOINT [ "dotnet", "ExampleApi.dll" ]
编辑:我正在使用禁用 SIP(系统完整性保护)的 10.14.6 Mojave。如果提供的答案对您有用,请告诉我。非常感谢!
【讨论】:
成功了!非常感谢 :) 也可以使用 Alpine 镜像构建镜像,运行时镜像是问题,将其更改为 Debian 镜像调试配置后工作正常! ;) 只是为了跟踪,这里是问题:youtrack.jetbrains.com/issue/RIDER-19133以上是关于使用 Dockerfile 使用 Jetbrains Rider 调试 .NET Core 应用程序的主要内容,如果未能解决你的问题,请参考以下文章
使用AWS CodeStar Python项目和JetBrain PyCharm
JetBrain Rider,使用带有 Windows 身份验证的 IIS Express 时访问被拒绝
jetbrain家的fleet(已获得预览权限)直接对标vscode , fleet有望超过vscode吗?今天我们实际操作下