发出命令时:docker build -t honda-api:build .
Step 7/10 : RUN dotnet restore ---> Running in beedd0465f48 MSBUILD : error MSB1003: Specify a project or solution file. The current working directory does not contain a project or solution file.
文件夹结构如下所示
Domain/
Honda.Domain/
Honda.Domain.csproj
API/
Honda.API/
Honda.API.csproj
Dockerfile
Docker 文件内容
FROM mcr.microsoft.com/dotnet/core/sdk:3.1
WORKDIR /home/app
COPY . .
COPY ./Domain/Honda.Domain/Honda.Domain.csproj Domain/
COPY ./API/Honda.API/Honda.API.csproj API/
RUN dotnet restore
RUN dotnet publish ./Honda.API.csproj -o /publish/
WORKDIR /publish ENV ASPNETCORE_URLS=https://+:5001;http://+:5000
ENTRYPOINT ["dotnet", "Honda.API.dll"]
最佳答案
如果您没有在根级别复制对所有项目进行分组的 .sln
文件,则需要对每个项目目录运行 dotnet Restore
或.csproj
文件,即:
RUN dotnet restore ./API
RUN dotnet restore ./API/Honda.API.csproj
但是,我不会遵循您的方法,复制遵循相同项目结构的所有内容,然后使用自定义文件复制 .csproj
文件,最好保持所有内容不变,并遵循 this approach .
类似这样的东西(另外,可能使用运行时镜像来运行应用程序,而不是 sdk 镜像,并使用 Release
配置):
FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
WORKDIR /app
# copy csproj and restore as distinct layers
COPY *.sln .
COPY ./Domain/Honda.Domain/*.csproj ./Domain/Honda.Domain/
COPY ./API/Honda.API/*.csproj ./API/Honda.API/
RUN dotnet restore
# copy everything else and build app
COPY . ./
WORKDIR /app/API/Honda.API
RUN dotnet publish -c Release -o publish
FROM mcr.microsoft.com/dotnet/aspnet:3.1
WORKDIR /app
COPY --from=build /app/API/Honda.API/publish ./
ENV ASPNETCORE_URLS=https://+:5001;http://+:5000
ENTRYPOINT ["dotnet", "Honda.API.dll"]
我还没有对此进行测试,但希望您可以对其进行调整并修复它存在的任何小问题。
关于.net - Docker 文件当前工作 > 目录不包含项目或解决方案文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64834706/