'Docker compose build error - Project file does not exist

I'm trying to create docker compose which run my ASP.NET Core app and mssql, but I'm getting an error during build.

Here's my docker compose file:

# Build Stage
FROM microsoft/aspnetcore-build:latest as build-env
WORKDIR /source
COPY . .
RUN dotnet restore ./Travelingowe.sln
RUN dotnet publish --output ${source:-obj/Docker/publish} --configuration Release

# Publish Stage
FROM microsoft/aspnetcore:latest
COPY --from=build-env ./obj/Docker/publish /app
WORKDIR /app
ENTRYPOINT ["dotnet", "Api.dll"]

when I run in CMD -> docker-compose up I'm getting:

Building api
Step 1/9 : FROM microsoft/aspnetcore-build:latest as build-env
 ---> d6273f7c44d4
Step 2/9 : WORKDIR /source
 ---> Using cache
 ---> 978f1c31e14a
Step 3/9 : COPY . .
 ---> Using cache
 ---> bcc750adcb99
Step 4/9 : RUN dotnet restore ./Travelingowe.sln
 ---> Running in 764199859de4
MSBUILD : error MSB1009: Project file does not exist.
Switch: ./Travelingowe.sln
ERROR: Service 'api' failed to build: The command '/bin/sh -c dotnet restore ./Travelingowe.sln' returned a non-zero code: 1

Do you have any ide what is wrong?

Thanks!

UPDATE: My project files: enter image description here



Solution 1:[1]

you have issues with your working directory try using absolute path instead of relative path in your working directory in docker file

Solution 2:[2]

TL;DR

Put your Dockerfile in your project root folder.


There are several question you need to think of:

  • Where is your Dockerfile?
  • How does docker-compose.yaml point to Dockerfile?

It seems like you put your Dockerfile in the other folder.

As document mentions:

Compose uses an alternate file to build with. A build path must also be specified.

When you use the Dockerfile on different folder with docker-compose.yaml you have to set up the context property.

As it set up, it will consider the Dockerfile's folder as project root folder. So when the command dotnet restore ./Travelingowe.sln executed, it shows you the error

You can manually test the command by running dotnet restore ./Travelingowe.sln in Dockerfile's folder. It should show the detail error message.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 varnit
Solution 2 呂學洲