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
相关产品推荐
相关产品推荐

