Docker – failed to compute cache key: not found – runs fine in Visual Studio

Total
0
Shares

I’ve generated a Dockerfile with Visual Studio. It runs in Visual Studio just fine and now I’m trying to build it from Windows itself (docker build ., and I tried many combinations). Yet I get the following error:

Error code

When I change copy to ./client.csproj it does continue and then I get:

Second error with changed copy path

What am I doing wrong? I changed Docker Linux to Windows, changed WSL, and restarted everything.

Dockerfile client


Solution

The way Visual Studio does it is a little bit odd.

Instead of launching docker build in the folder with the Dockerfile, it launches in the parent folder and specifies the Dockerfile with the -f option.

I was using the demo project (trying to create a minimal solution for another question) and struck the same situation.

Setup for my demo project is

WorkerService2  ("solution" folder)
   +- WorkerService2.sln
   +- WorkserService2  ("project" folder)
       +- DockerFile
       +- WorkerService2.csproj
       +- ... other program files

So I would expect to go

cd Workerservice2WorkerService2
docker build .

But I get your error message.

 => ERROR [build 3/7] COPY [WorkerService2/WorkerService2.csproj, WorkerService2/]                                                                                                                        0.0s
------
 > [build 3/7] COPY [WorkerService2/WorkerService2.csproj, WorkerService2/]:
------
failed to compute cache key: "/WorkerService2/WorkerService2.csproj" not found: not found

Instead, go to the parent directory, with the .sln file and use the docker -f option to specify the Dockerfile to use in the subfolder:

cd Workerservice2
docker build -f WorkerService2Dockerfile --force-rm -t worker2/try7 .

docker run -it worker2/try7    

Edit (Thanks Mike Loux, tblev & Goku):

Note the final dot on the docker build command.

For docker the final part of the command is the location of the files that Docker will work with. Usually this is the folder with the Dockerfile in, but that’s what’s different about how VS does it. In this case the dockerfile is specified with the -f. Any paths (such as with the COPY instruction in the dockerfile) are relative to the location specified. The . means "current directory", which in my example is WorkerService2.

I got to this stage by inspecting the output of the build process, with verbosity set to Detailed.
If you choose Tools / Options / Projects and Solutions / Build and Run you can adjust the build output verbosity, I made mine Detailed.

Edit #2 I think I’ve worked out why Visual Studio does it this way.
It allows the project references in the same solution to be copied in.

If it was set up to do docker build from the project folder, docker would not be able to COPY any of the other projects in the solution in. But the way this is set up, with current directory being the solution folder, you can copy referenced projects (subfolders) into your docker build process.

Source: StackOverflow.com

Leave a Reply

Your email address will not be published. Required fields are marked *