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

WindowsVisual StudioDockerCommand Line-InterfaceWindows Subsystem-for-Linux

Windows Problem Overview


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

Windows Solutions


Solution 1 - Windows

Check your .dockerignore file. Possible it ignores needed files for copy command and you get failed to compute cache key error.

Solution 2 - Windows

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 - Windows

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 - Windows

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

Solution 5 - Windows

In my case I found that docker build is case sensitive in directory name, so I was writing /bin/release/net5.0/publish in the COPY instruction and failed with the same error, I've just changed to /bin/Release/net5.0/publish and it worked

Solution 6 - Windows

Error : failed to compute cache key: "src" not found: not found

in my case , folder/file excluded in .dockerignore

  1. after resolving file from dockerignore able to create image.

Solution 7 - Windows

I had the same issue. In my case there was a wrong directory specified. My Dockerfile was:

FROM mcr.microsoft.com/dotnet/sdk:5.0 AS publish
WORKDIR /app
COPY . .
RUN dotnet publish -c Release -o publish/web src/MyApp/MyApp.csproj

FROM mcr.microsoft.com/dotnet/aspnet:5.0
WORKDIR /app
COPY --from=publish publish/web .
EXPOSE 80
CMD ASPNETCORE_URLS=http://*:$PORT dotnet MyApp.dll

Then I realised that in the second build stage I am trying to copy project files from directory publish/web:

COPY --from=publish publish/web .

But as I specified workdir /app in the first stage, my files are located in that directory in image filesystem, so changing path from publish/web to app/publish/web resolved my issue.

So my final working Dockerfile is:

FROM mcr.microsoft.com/dotnet/sdk:5.0 AS publish
WORKDIR /app
COPY . .
RUN dotnet publish -c Release -o publish/web src/MyApp/MyApp.csproj

FROM mcr.microsoft.com/dotnet/aspnet:5.0
WORKDIR /app
COPY --from=publish app/publish/web .
EXPOSE 80
CMD ASPNETCORE_URLS=http://*:$PORT dotnet MyApp.dll

Solution 8 - Windows

The following command was failing with failed to compute cache key: not found:

docker build -t tag-name:v1.5.1 - <Dockerfile

Upon changing the command to the following it got fixed:

docker build -t tag-name:v1.5.1 -f Dockerfile .

Solution 9 - Windows

In my case, I had something like this:

  FROM mcr.microsoft.com/dotnet/aspnet:5.0
  COPY bin/Release/net5.0/publish/ app/
  WORKDIR /app
  ENTRYPOINT ["dotnet", "MyApi.dll"]

And I finally realized that I had the bin folder in my .dockerignore file.

Solution 10 - Windows

I had faced the same issue.

The reason was the name of the DLL file in the Docker file is case sensitive.

FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
COPY MyFirstMicroService.csproj .
RUN dotnet restore
COPY . .
RUN dotnet publish -c release -o /app

FROM mcr.microsoft.com/dotnet/aspnet:5.0
WORKDIR /app
COPY --from=build /app .
ENTRYPOINT ["dotnet", "**MyFirstMicroService.dll**"]

This .dll name should match your .csproj file.

Solution 11 - Windows

In my case there was a sneaky trailing whitespace in the file name.

------
 > [3/3] COPY init.sh ./:
------
failed to compute cache key: "/init.sh" not found: not found

So the file was actually called "init.sh " instead of "init.sh".

Solution 12 - Windows

This also happens when you don't provide the proper path to your COPY command input. The most important clue I had is that WORKDIR command opens a folder for the container, not in the windows explorer (so it doesn't affect the path you need to specify for the COPY command).

Solution 13 - Windows

In my Case, i was doing mistake in '/' and ''. Let me explain Open your dockerfile (it should be named as dockerfile only, not DockerFile or Dockerfile). You may have something like this- FROM mcr.microsoft.com/dotnet/runtime:5.0 COPY bin\Release\net5.0\publish . ENTRYPOINT ["dotnet", "HelloDocker.dll"]

Replace COPY bin\Release\net5.0\publish . to COPY bin/Release/net5.0/publish .

Solution 14 - Windows

in my case, it was a wrong Build with PATH configuration e.g. Docker build context

  1. Simple docker script
    docker build . 
    
    where . is path to build context
  2. Gradle+Docker
    docker {
        dependsOn build
        dependsOn dockerFilesCopy
        name "${project.name}:${project.version}"
        files "build" // path to build context
    }
    
  3. Gradle+GitHub action
    name: Docker build and push
    
    on:
      push:
        branches: [ main ]
    
    # ...
    
    jobs:
      build:
        runs-on: ubuntu-latest
    
        # ...
    
        steps:
          - name: Checkout
            uses: actions/checkout@v2
    
         # ...
    
          - name: Build and export to Docker
            uses: docker/build-push-action@v2
            with:
              # ...
              file: src/main/docker/Dockerfile 		
              context: ./build 						# path to build context
    

Solution 15 - Windows

In my case, with Angular project, my project was in the folder called ex: My-Folder-Project and I was putting on Dockerfile COPY --from=publish app/dist/My-Folder-Project . But of course the correct thing is put the "name" in your package.json like COPY --from=publish app/dist/name-in-package.json .

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionSjardi Djoy WillemsView Question on Stackoverflow
Solution 1 - WindowsIlia ReshetnikovView Answer on Stackoverflow
Solution 2 - WindowsGregHNZView Answer on Stackoverflow
Solution 3 - Windowsquestionto42standswithUkraineView Answer on Stackoverflow
Solution 4 - WindowsIsmail UmarView Answer on Stackoverflow
Solution 5 - WindowsLuis Diego RojasView Answer on Stackoverflow
Solution 6 - WindowsPrabhuView Answer on Stackoverflow
Solution 7 - WindowspkirilinView Answer on Stackoverflow
Solution 8 - WindowsVishrantView Answer on Stackoverflow
Solution 9 - WindowscontactmattView Answer on Stackoverflow
Solution 10 - WindowsSukhvinder SinghView Answer on Stackoverflow
Solution 11 - WindowsNiklas GruhnView Answer on Stackoverflow
Solution 12 - WindowsGeorgiGView Answer on Stackoverflow
Solution 13 - WindowsAdityaView Answer on Stackoverflow
Solution 14 - WindowslazyleadView Answer on Stackoverflow
Solution 15 - WindowsAlan NaicsonView Answer on Stackoverflow