Windows执行docker build报错:找不到指定文件的解决方案咨询
问题根源
Visual Studio构建Docker镜像时,默认会将**解决方案根目录(MyDevApp-Web)**作为Docker构建上下文,所以Dockerfile里的路径是相对于根目录的,能正常找到所有项目文件。但你直接在MyDevApp目录下执行docker build .时,构建上下文是当前的MyDevApp文件夹,里面没有ApplicationCore、Infrastructure这些同级目录,因此COPY命令会报错找不到文件。
解决方法
方法一:调整Docker构建命令(推荐,无需修改Dockerfile)
执行build命令时,指定解决方案根目录作为构建上下文,同时用-f参数指定Dockerfile的具体路径:
- 如果你当前终端在
MyDevApp目录下,执行:
docker build -t mydevdockerimage -f MyDevApp/Dockerfile ..
- 如果你当前终端在
MyDevApp-Web目录下,执行:
docker build -t mydevdockerimage -f MyDevApp/Dockerfile .
方法二:修改Dockerfile中的路径(适合在MyDevApp目录下直接构建)
因为Dockerfile位于MyDevApp目录,构建上下文是当前目录,所以需要用../引用上级目录的项目文件,修改后的Dockerfile如下:
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base WORKDIR /app EXPOSE 80 EXPOSE 443 FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build WORKDIR /src # 用../引用上级目录的项目文件 COPY ["../MyDevApp/MyDevApp.csproj", "MyDevApp/"] COPY ["../Application.Models/Application.Models.csproj", "Application.Models/"] COPY ["../ApplicationCore/ApplicationCore.csproj", "ApplicationCore/"] COPY ["../Infrastructure/Infrastructure.csproj", "Infrastructure/"] RUN dotnet restore "MyDevApp/MyDevApp.csproj" # 拷贝整个解决方案内容 COPY ../ . WORKDIR "/src/MyDevApp" RUN dotnet build "MyDevApp.csproj" -c Release -o /app/build FROM build AS publish RUN dotnet publish "MyDevApp.csproj" -c Release -o /app/publish /p:UseAppHost=false FROM base AS final WORKDIR /app COPY --from=publish /app/publish . ENTRYPOINT ["dotnet", "MyDevApp.dll"]
修改完成后,直接在MyDevApp目录下执行原命令即可:
docker build -t mydevdockerimage .
内容的提问来源于stack exchange,提问作者Amature123
相关产品推荐
相关产品推荐

