Docker - failed to compute cache key: not found - runs fine in Visual Studio
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:
When I change copy to ./client.csproj
it does continue and then I get:
What am I doing wrong? I changed Docker Linux to Windows, changed WSL, and restarted everything.
Dockerfile client
Solution 1:
Check your .dockerignore
file. Possible it ignores needed files for copy command and you get failed to compute cache key error.
Solution 2:
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 \Workerservice2\WorkerService2
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 WorkerService2\Dockerfile --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.
Solution 3:
Asking for a directory that does not exist throws this error.
In my case, I tried
> [stage-1 7/14] COPY /.ssh/id_rsa.pub /.ssh/:
------
failed to compute cache key: "/.ssh/id_rsa.pub" not found: not found
I had forgotten to add the /.ssh
folder to the project directory. In your case you should check whether /client
is really a subfolder of your Dockerfile build context.
Solution 4:
I had the same issue, I set the Docker environment to Windows in when adding Docker support. Even running in Visual Studio threw error to that. I changed the environment to Linux as my Docker is running in the Windows Subsystem for Linux (WSL).
Then I moved back to the terminal to run the commands.
I was able to resolve this by moving to the Solutions folder (Root folder).
And I did docker build
like this:
docker build -t containername/tag -f ProjectFolder/Dockerfile .
Then I did docker run
:
docker run containername/tag