skip to Main Content

This is a very simple API I’ve created with .NET 6 and ASP.NET Core that I’m trying to dockerize.

I’m always getting the same error while running docker build command.
this is my docker file:

FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build-env
WORKDIR /app

# Copy csproj and restore as distinct layers
COPY *.csproj ./
RUN dotnet restore "MyAPI/MyAPI.csproj" //this is where the build stops


# Copy everything else and build
COPY .. ./
RUN dotnet publish -c Release -o out 


# Build runtime image
FROM mcr.microsoft.com/dotnet/aspnet:6.0
WORKDIR /app
EXPOSE 80
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "MyAPI.dll"]

this is the error I’m getting :

=> ERROR [build-env 4/6] RUN dotnet restore                                                                                                               0.7s 
------
 > [build-env 4/6] RUN dotnet restore:
#11 0.676 MSBUILD : error MSB1003: Specify a project or solution file. The current working directory does not contain a project or solution file.
------
executor failed running [/bin/sh -c dotnet restore]: exit code: 1

I guess the problem is a path problem and I’ve tried my ways to pass in the path to my folder yet it kept giving me the same error.

If I try to run the dotnet restore command individually in the terminal, it works which tells me that the path is correct.

What could be the problem?

2

Answers


  1. Please check if the csproj file really exists in your PC file system on the path yourSolutionRootFolder/MyAPI/MyAPI.csproj

    You may have a typo in the path? Upper/lower case typo?

    Login or Signup to reply.
  2. COPY *.csproj ./ doesn’t find anything to copy, since your .csproj file is in the MyAPI/ directory.

    Change the statement to

    COPY MyAPI/MyAPI.csproj MyAPI/
    

    Where you copy the rest of the files and publish the project should also be changed to

    COPY . ./
    RUN dotnet publish -c Release -o out MyAPI/MyAPI.csproj
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search