Visual Studio使用docker-compose调试.NET 5 gRPC项目报错如何解决
问题根因
你所有项目的Dockerfile都存在语法错误,多阶段构建末尾多余的FROM mcr.microsoft.com/dotnet/sdk:5.0指令,直接覆盖了前面final阶段的所有构建结果:
- 该指令会开启一个全新的镜像构建阶段,前面
COPY --from=publish /app/publish .拷贝到/app目录的应用程序文件全部丢失 - 最终生成的镜像仅包含纯净的.NET 5 SDK环境,没有任何你的项目编译产物,所以运行时会提示找不到dll文件
- 命令行执行
docker-compose up --build能正常运行属于缓存命中的巧合,大概率是你新增多余FROM指令前构建的旧镜像没有被清理,被复用了。
修复步骤
- 修正所有项目的Dockerfile,删除末尾多余的
FROM mcr.microsoft.com/dotnet/sdk:5.0行,将ENTRYPOINT指令归到final阶段下,修正后的Dockerfile末尾部分如下(对应Gateway项目,其他项目替换成自己的程序集名称即可):
FROM base AS final WORKDIR /app COPY --from=publish /app/publish . ENTRYPOINT ["dotnet", "Votinger.Gateway.Web.dll"]
- 清理Docker缓存避免旧镜像干扰,执行以下命令删除无效的镜像、容器缓存:
docker system prune -f
- 重启Visual Studio,右键docker-compose项目选择【重新生成】,之后再启动调试即可恢复正常。
补充说明
Visual Studio的Docker快速调试模式默认会跳过Dockerfile中的build/publish阶段,直接将本地编译的Debug目录挂载到容器内的对应路径,本次问题和这个机制无关,仅需要修复Dockerfile的语法错误即可解决。
内容的提问来源于stack exchange,提问作者SeanBaker
相关产品推荐
相关产品推荐

