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

VS2019附加调试器到本地Docker Linux容器失败求助

解决Visual Studio 2019附加Docker Linux容器调试时的“Failed to copy files”问题

我之前也碰到过类似的调试附加失败的情况,结合你的配置和错误日志,给你几个具体的排查和解决方向:

核心问题分析

从日志来看,问题出在VS尝试复制调试器启动脚本到容器内/root/.vs-debugger目录时权限不足,或者手动安装的调试器与VS自动部署的版本冲突。结合你的配置文件,重点排查卷挂载和调试器安装的冲突点。

具体解决线索

1. 移除Dockerfile中手动安装vsdbg的步骤

你在Dockerfile里已经手动通过curl安装了vsdbg,但Visual Studio在附加调试时,会自动根据当前VS版本下载匹配的调试器到容器内,手动安装的版本可能和VS需要的版本不兼容,导致复制文件时冲突。

修改你的Dockerfile,删除这两行:

RUN curl -sSL \
 https://aka.ms/getvsdbgsh | bash /dev/stdin -v vs2019 -l /root/.vs-debugger

2. 调整docker-compose中的卷挂载权限

你挂载了~/.nuget:/root/.nuget和/root/.nuget/packages/.tools,这可能导致容器内/root目录下的子目录权限异常(本地用户的UID和容器内root的UID不一致,导致写权限不足)。

可以尝试:

  • 暂时移除这两个卷挂载,看看调试是否能正常进行:
    volumes:
      - .:/app
      - /app/obj
      - /app/bin
    
  • 如果需要保留nuget缓存挂载,建议在Dockerfile中添加权限设置:
    RUN mkdir -p /root/.nuget && chmod -R 777 /root/.nuget
    

3. 确保容器内/root/.vs-debugger目录权限正确

如果坚持手动安装调试器,需要确保该目录有足够的写权限,让VS能复制启动脚本进去。在Dockerfile中添加权限设置:

RUN chmod -R 777 /root/.vs-debugger

4. 重新检查Docker主机的共享驱动器设置

虽然你已经勾选了共享驱动器,但可以尝试重置:取消共享选项,重启Docker服务,再重新勾选并输入Windows账号密码,确保共享权限正常生效。

修改后的示例配置

修改后的Dockerfile

FROM microsoft/aspnetcore-build:1.1.2
RUN apt-get update && apt-get install -y unzip
COPY node_modules/wait-for-it.sh/bin/wait-for-it /tools/wait-for-it.sh
RUN chmod +x /tools/wait-for-it.sh
ENV DBHOST=dev_mysql WAITHOST=dev_mysql WAITPORT=3306
ENV DOTNET_USE_POLLING_FILE_WATCHER=true
EXPOSE 80/tcp
VOLUME /app
WORKDIR /app
ENTRYPOINT dotnet restore \
 && /tools/wait-for-it.sh $WAITHOST:$WAITPORT --timeout=0 \
 && dotnet watch run --environment=Development

修改后的docker-compose.yml(移除可能冲突的卷)

version: "3"
volumes:
  productdata:
networks:
  backend:
services:
  mysql:
    image: "mysql:8.0.0"
    volumes:
      - productdata:/var/lib/mysql
    networks:
      - backend
    environment:
      - MYSQL_ROOT_PASSWORD=mysecret
      - bind-address=0.0.0.0
  mvc:
    build:
      context: .
      dockerfile: Dockerfile
    volumes:
      - .:/app
      - /app/obj
      - /app/bin
    ports:
      - 3000:80
    networks:
      - backend
    environment:
      - DBHOST=mysql
      - WAITHOST=mysql
    depends_on:
      - mysql

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 19:42:53