VSCode Docker调试.NET 5 WebApi报csharp.listRemoteProcess失败?
.NET 5 WebApi 容器调试附加时报错问题
有一个.NET 5 WebApi项目,计划在Docker环境完成托管与调试。
执行docker-compose命令后,项目可正常启动运行,但在附加调试器时抛出如下报错:Running the contributed command csharp.listRemoteProcess failed
现有配置内容
Dockerfile 配置
FROM mcr.microsoft.com/dotnet/sdk:5.0 as debug ENV DOTNET_USE_POLLING_FILE_WATCHER=true ENV ASPNETCORE_URLS=http://+:5000 EXPOSE 5000/tcp WORKDIR /app COPY . /app RUN apt-get update RUN apt-get install -y unzip RUN curl -sSL https://aka.ms/getvsdbgsh | /bin/sh /dev/stdin -v latest -l ~/vsdbg ENTRYPOINT ["dotnet", "watch", "run", "--project myproject.csproj"]
docker-compose 配置
version: '3.4' services: server: build: context: ./myproject target: debug ports: - "5000:5000" container_name: myproject volumes: - ./myproject:/app
VS Code launch.json 调试配置
{ "version": "0.2.0", "configurations": [ { "name": ".NET Core Docker Attach", "type": "coreclr", "request": "attach", "processId": "${command:pickRemoteProcess}", "pipeTransport": { "pipeProgram": "docker", "pipeArgs": [ "exec", "-i", "csharp" ], "debuggerPath": "/root/vsdbg/vsdbg", "pipeCwd": "${workspaceRoot}", "quoteArgs": false }, "sourceFileMap": { "/work": "${workspaceRoot}/myproject/" } } ] }
报错原因与修复步骤
- 容器名不匹配导致管道连接失败
当前launch.json中pipeArgs传入的容器名是csharp,但docker-compose里明确指定容器名为myproject,执行docker exec -i csharp命令会直接返回找不到容器的错误,调试器根本无法和容器建立管道,自然会触发列取远程进程失败的报错。
修复:将pipeArgs内容调整为["exec", "-i", "myproject"] - 源码映射路径错误
当前sourceFileMap配置的容器内源码路径是/work,但容器通过volume挂载的项目实际路径是/app,就算管道连接正常,后续附加调试时也会因为路径不匹配出现断点不生效、源码无法定位的问题。
修复:将sourceFileMap的键调整为/app,即配置为"/app": "${workspaceRoot}/myproject/" - 冗余配置清理
Dockerfile中的COPY . /app步骤属于冗余配置,因为compose的volume挂载会直接覆盖/app下的原有文件,移除此步骤可以缩短镜像构建时间、减少镜像体积。 - 异常排查兜底
完成上述修改后如果依然报错,可以手动执行docker exec -it myproject bash进入容器,运行/root/vsdbg/vsdbg --version验证调试器是否可正常执行,排除调试器安装损坏、执行权限不足的问题。
内容的提问来源于stack exchange,提问作者JMan
相关产品推荐
相关产品推荐

