He generado un Dockerfile con Visual Studio. Se ejecuta en Visual Studio muy bien y ahora estoy tratando de compilarlo desde Windows ( docker build . , y probé muchas combinaciones). Sin embargo, me sale el siguiente error:
Cuando cambio la copia a ./client.csproj , continúa y luego obtengo:
¿Qué estoy haciendo mal? Cambié Docker Linux a Windows, cambié WSL y reinicié todo.
Verifique su archivo .dockerignore. Es posible que ignore los archivos necesarios para el comando de copia y no se pudo calcular el error de clave de caché.
La forma en que Visual Studio lo hace es un poco extraña.
En lugar de iniciar la docker build de Docker en la carpeta con Dockerfile, se inicia en la carpeta principal y especifica el Dockerfile con la opción -f .
Estaba usando el proyecto de demostración (tratando de crear una solución mínima para otra pregunta) y me encontré con la misma situación.
La configuración de mi proyecto de demostración es
\WorkerService2 ("solution" folder) +- WorkerService2.sln +- WorkserService2 ("project" folder) +- DockerFile +- WorkerService2.csproj +- ... other program filesAsí que esperaría ir
cd \Workerservice2\WorkerService2 docker build .Pero recibo tu mensaje de error.
=> 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 En su lugar, vaya al directorio principal, con el archivo .sln y use la opción docker -f para especificar el Dockerfile para usar en la subcarpeta:
cd \Workerservice2 docker build -f WorkerService2\Dockerfile --force-rm -t worker2/try7 . docker run -it worker2/try7Editar (Gracias Mike Loux, tblev y Goku):
Tenga en cuenta el punto final en el comando de docker build .
Para Docker, la parte final del comando es la ubicación de los archivos con los que trabajará Docker. Por lo general, esta es la carpeta que contiene el Dockerfile, pero eso es lo que hace diferente a VS. En este caso, el dockerfile se especifica con -f . Cualquier ruta (como con la instrucción COPY en el dockerfile) es relativa a la ubicación especificada. el . significa "directorio actual", que en mi ejemplo es \WorkerService2 .
Llegué a esta etapa al inspeccionar el resultado del proceso de compilación, con el nivel de detalle establecido en Detallado. Si elige Herramientas/Opciones/Proyectos y Soluciones/Compilar y Ejecutar, puede ajustar la verbosidad de salida de la compilación, yo hice la mía Detallada.
Preguntar por un directorio que no existe arroja este error.
En mi caso, probé
> [stage-1 7/14] COPY /.ssh/id_rsa.pub /.ssh/: ------ failed to compute cache key: "/.ssh/id_rsa.pub" not found: not found Había olvidado agregar la carpeta /.ssh al directorio del proyecto. En su caso, debe verificar si /client es realmente una subcarpeta de su contexto de compilación de Dockerfile.
En mi caso, descubrí que docker build distingue entre mayúsculas y minúsculas en el nombre del directorio, por lo que estaba escribiendo /bin/release/net5.0/publish en la instrucción COPY y fallé con el mismo error, acabo de cambiar a /bin/Release /net5.0/publish y funcionó
Me había enfrentado al mismo problema.
El motivo fue que el nombre del archivo DLL en el archivo Docker distingue entre mayúsculas y minúsculas.
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**"]Este nombre .dll debe coincidir con su archivo .csproj.
Tuve el mismo problema, configuré el entorno de Docker en Windows cuando agregué la compatibilidad con Docker. Incluso ejecutar en Visual Studio arrojó un error a eso. Cambié el entorno a Linux porque mi Docker se ejecuta en el Subsistema de Windows para Linux (WSL).
Luego volví a la terminal para ejecutar los comandos.
Pude resolver esto moviéndome a la carpeta Soluciones (carpeta raíz).
E hice docker build así:
docker build -t containername/tag -f ProjectFolder/Dockerfile . Luego ejecuté la docker run :
docker run containername/tagTuve el mismo problema. En mi caso, se especificó un directorio incorrecto. Mi Dockerfile era:
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 Luego me di cuenta de que en la segunda etapa de compilación estoy tratando de copiar los archivos del proyecto desde el directorio de publish/web :
COPY --from=publish publish/web . Pero como especifiqué workdir /app en la primera etapa, mis archivos están ubicados en ese directorio en el sistema de archivos de imagen, por lo que cambiar la ruta de publish/web a app/publish/web resolvió mi problema.
Entonces mi Dockerfile de trabajo final es:
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.dllEn mi caso, había un espacio en blanco furtivo al final en el nombre del archivo.
------ > [3/3] COPY init.sh ./: ------ failed to compute cache key: "/init.sh" not found: not foundEntonces, el archivo en realidad se llamó "init.sh" en lugar de "init.sh".
En mi caso, estaba cometiendo un error en '/' y ''. Déjame explicarte: abre tu dockerfile (debe llamarse solo dockerfile, no DockerFile o Dockerfile). Es posible que tenga algo como esto : DESDE mcr.microsoft.com/dotnet/runtime:5.0 COPY bin\Release\net5.0\publish . PUNTO DE ENTRADA ["dotnet", "HelloDocker.dll"]
Reemplace COPY bin\Release\net5.0\publish. para COPIAR bin/Release/net5.0/publish.
Error: no se pudo calcular la clave de caché: "src" no encontrado: no encontrado
en mi caso, carpeta/archivo excluido en .dockerignore
El siguiente comando fallaba failed to compute cache key: not found :
docker build -t tag-name:v1.5.1 - <DockerfileAl cambiar el comando a lo siguiente, se solucionó:
docker build -t tag-name:v1.5.1 -f Dockerfile .Esto también sucede cuando no proporciona la ruta adecuada a la entrada del comando COPY. La pista más importante que tuve es que el comando WORKDIR abre una carpeta para el contenedor, no en el explorador de Windows (por lo que no afecta la ruta que debe especificar para el comando COPY).