使用Docker构建Rider的.NET控制台项目时提示.csproj未找到
解决Docker构建找不到csproj或Dockerfile的问题
原因分析
自动生成的Dockerfile是基于解决方案根目录作为构建上下文设计的,但你的执行路径和上下文不匹配:
- 在项目目录(
RootFolder)执行docker build .时,构建上下文是当前项目目录,Dockerfile里的COPY ["RootFolder/RootFolder.csproj", "RootFolder/"]会去当前目录找RootFolder子目录,自然找不到目标文件。 - 执行
docker build ..时,构建上下文切换为解决方案根目录,但Dockerfile存放在RootFolder目录里,Docker默认会在上下文根目录查找Dockerfile,因此提示文件不存在。
正确解决步骤
方法1:指定Dockerfile路径与正确构建上下文
在解决方案根目录执行以下命令,明确指定Dockerfile的位置:
docker build -f RootFolder/Dockerfile .
.表示将解决方案根目录作为构建上下文,确保Dockerfile里的COPY路径能匹配到项目文件-f RootFolder/Dockerfile指定使用项目目录下的Dockerfile文件
方法2:调整Dockerfile位置(更规范的做法)
把自动生成的Dockerfile从项目目录(RootFolder)移动到解决方案根目录,无需修改Dockerfile内容,直接在解决方案根目录执行:
docker build .
Docker会自动识别根目录下的Dockerfile,且构建上下文正确,COPY路径能正常匹配。
方法3:修改Dockerfile适配项目目录作为构建上下文
如果坚持在项目目录执行构建,修改Dockerfile里的路径,去掉RootFolder/前缀:
FROM mcr.microsoft.com/dotnet/runtime:7.0 AS base WORKDIR /app FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build WORKDIR /src COPY ["RootFolder.csproj", "."] RUN dotnet restore "RootFolder.csproj" COPY . . WORKDIR "/src" RUN dotnet build "RootFolder.csproj" -c Release -o /app/build FROM build AS publish RUN dotnet publish "RootFolder.csproj" -c Release -o /app/publish FROM base AS final WORKDIR /app COPY --from=publish /app/publish . ENTRYPOINT ["dotnet", "RootFolder.dll"]
然后在项目目录(RootFolder)执行:
docker build .
验证
构建成功后,运行容器测试:
docker run <生成的镜像名称>
正常情况下会输出Hello World!
内容的提问来源于stack exchange,提问作者R.Haughton
相关产品推荐
相关产品推荐

