使用docker-compose运行ASP.NET Core项目时提示vsdbg不存在、调试适配器启动失败
核心问题根因说明
报错/bin/sh: 1: /remote_debugger/vsdbg: not found与构建端提示vsdbg已找到的矛盾点,本质是Visual Studio本地已准备好调试工具,但调试工具未被正确加载到docker-compose启动的容器中,或容器内无法正常执行该工具。
排查方向
1. 检查docker-compose配置完整性
- 确认启动调试时加载了VS自动生成的
docker-compose.override.yml文件。VS为docker-compose项目启用调试时,会自动在该override文件中注入vsdbg工具的临时卷挂载、调试入口点覆盖配置,若你仅加载了自定义的docker-compose.yml启动调试,会导致本地已准备的vsdbg没有被挂载到容器内。 - 检查自定义Dockerfile中是否存在删除
/remote_debugger目录、修改根目录权限的指令,此类操作会导致挂载的vsdbg无法被容器访问。
2. 核对架构兼容性
- 若你的Docker基础镜像为arm64架构,而Windows主机为x64架构,VS默认推送的x64版本vsdbg在arm64容器内会触发架构不兼容的「文件未找到」报错(即使文件实际存在)。
- 可手动进入运行中的容器,执行
uname -a查看容器架构,执行ls /remote_debugger/确认vsdbg文件是否存在,若文件存在仍报错则可确定为架构不匹配问题,更换与主机架构一致的基础镜像即可。
3. 验证文件共享权限
- WSL2模式下:若测试项目存放在Windows的
/mnt/c等跨系统挂载盘内,WSL2与Windows的跨文件系统挂载会出现权限异常,导致vsdbg的执行权限丢失,容器内无法运行。建议将项目迁移到WSL2虚拟磁盘内重试。 - Hyper-V模式下:确认Docker Desktop的文件共享设置中已开启项目所在磁盘的共享权限,避免临时挂载的vsdbg目录被权限拦截。
4. 重置VS项目缓存
- 手动执行
docker-compose up -d启动容器,之后通过VS顶部菜单「调试」->「附加到进程」选择目标容器,尝试附加到容器内的.NET进程。若该方式可正常调试,说明VS启动docker-compose调试的自动注入逻辑异常,删除项目根目录下的.vs隐藏文件夹,重置项目缓存后再重试即可。
内容的提问来源于stack exchange,提问作者Kevin Versfeld
相关产品推荐
相关产品推荐

