You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VS Code调试WSL2中Docker容器内.NET 7应用报错‘fetch failed’

问题描述

数月未调试的Docker容器中.NET 7应用,此前运行正常。使用VS Code的「Docker .NET Attach (Preview)」配置调试时,先弹出「Acquiring .NET Debugger」通知,随即出现「fetch failed」错误。

已尝试的操作:

  • 删除WSL2 Ubuntu中的~/.vsdbg目录
  • 重装VS Code的Docker扩展

Dockerfile内容

FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build
WORKDIR /app
EXPOSE 80

COPY src/zscaler.crt /usr/local/share/ca-certificates/zscaler.crt
RUN update-ca-certificates

#copy all csproj files and restore as distinct layers. Use the same COPY command
#for every dockerfile in the project to take andvantage of docker caching

COPY XYZ.sln XYZ.sln
COPY src/123/123.csproj src/123/123.csproj
COPY src/SearchService/SearchService.csproj src/SearchService/SearchService.csproj
COPY src/456/456.csproj src/456/456.csproj
COPY src/789/789.csproj src/789/789.csproj
COPY src/ABC/ABC.csproj src/ABC/ABC.csproj

# Restore package deps
RUN dotnet restore XYZ.sln

# Copy the app folders over
COPY src/SearchService src/SearchService
COPY src/789 src/789
WORKDIR /app/src/SearchService
RUN dotnet publish -c Debug -o /app/src/out

# Build runtime image
FROM mcr.microsoft.com/dotnet/aspnet:7.0
WORKDIR /app
COPY --from=build /app/src/out .
ENTRYPOINT [ "dotnet", "SearchService.dll" ]

.vscode/launch.json内容

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Docker .NET Attach (Preview)",
            "type": "docker",
            "request": "attach",
            "platform": "netCore",
            "sourceFileMap": {
                "/app": "${workspaceFolder}"
            }
        },
        {
            "name": ".NET Core Launch (web)",
            "type": "coreclr",
            "request": "launch",
            "preLaunchTask": "build",
            "program": "${workspaceFolder}/src/SearchService/bin/Debug/net7.0/SearchService.dll",
            "args": [],
            "cwd": "${workspaceFolder}/src/SearchService",
            "stopAtEntry": false,
            "serverReadyAction": {
                "action": "openExternally",
                "pattern": "\\bNow listening on:\\s+(https?://\\S+)"
            },
            "env": {
                "ASPNETCORE_ENVIRONMENT": "Development"
            },
            "sourceFileMap": {
                "/Views": "${workspaceFolder}/Views"
            }
        },
        {
            "name": ".NET Core Attach",
            "type": "coreclr",
            "request": "attach"
        }
    ]
}
解决建议
  1. 排查容器网络与代理

    • 进入容器执行curl https://aka.ms/getvsdbgsh,验证是否能正常访问调试器下载地址。
    • 若存在代理拦截,在Dockerfile的build和runtime阶段添加代理环境变量:
      ENV HTTP_PROXY=http://你的代理地址:端口
      ENV HTTPS_PROXY=http://你的代理地址:端口
      
    • 同步配置VS Code代理,在settings.json中添加:
      "http.proxy": "http://你的代理地址:端口",
      "https.proxy": "http://你的代理地址:端口"
      
  2. 手动在容器内安装调试器

    • 进入运行中的容器:docker exec -it <容器ID> bash
    • 执行安装脚本:
      curl -sSL https://aka.ms/getvsdbgsh | bash /dev/stdin -v latest -l /vsdbg
      
    • 安装完成后重新尝试VS Code附加调试。
  3. 调整镜像构建配置

    • 开发环境下,可将runtime阶段的基础镜像替换为包含调试工具的SDK镜像:
      # 替换原runtime阶段
      FROM mcr.microsoft.com/dotnet/sdk:7.0
      WORKDIR /app
      COPY --from=build /app/src/out .
      ENTRYPOINT [ "dotnet", "SearchService.dll" ]
      
    • 注意:SDK镜像体积大,仅用于开发,生产环境仍使用aspnet镜像。
  4. 重置WSL与VS Code扩展

    • 更新VS Code的C#扩展和Docker扩展至最新版。
    • 执行wsl --shutdown重启WSL服务,重新启动Ubuntu后再尝试调试。
    • 检查WSL与Windows的文件共享权限,确保${workspaceFolder}映射路径可正常访问。

内容的提问来源于stack exchange,提问作者Jakub

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 10:42:04