J'ai généré un dockerfile avec Visual Studio. Il s'exécute très bien dans Visual Studio et maintenant j'essaie de le construire à partir de Windows lui-même ( docker build.
, et j'ai essayé de nombreuses combinaisons). Pourtant, j'obtiens l'erreur suivante:
Lorsque je modifie la copie en ./ client.csproj
, cela continue et ensuite j'obtiens:
Qu'est-ce que je fais de mal? J'ai changé Docker Linux en Windows, changé wsl , et redémarré tout.
15 Réponses :
En demandant un répertoire qui n'existe pas lance cette erreur.
Dans mon cas, j'ai essayé
> [stage-1 7/14] COPY /.ssh/id_rsa.pub /.ssh/: ------ failed to compute cache key: "/.ssh/id_rsa.pub" not found: not found
j'avais oublié d'ajouter le /. dossier ssh
dans le répertoire du projet. Dans votre cas, vous devez vérifier si / client
est vraiment un sous-dossier de votre contexte de construction dockerfile.
Idem ici, fait une faute de frappe
Dans mon cas, j'ai constaté que Docker Build est sensible à la casse dans le nom du répertoire, donc j'écrivais /bin/release/net5.0/publish dans l'instruction de copie et j'ai échoué avec la même erreur, je viens de passer à / bac / version / net5.0 / publier et cela a fonctionné
C'était la réponse pour moi. Les fenêtres ne sont pas sensibles à la casse sur le chemin rend parfois le travail avec Docker.
Vérifiez votre fichier .dockaignore
. Possible qu'il ignore les fichiers nécessaires pour la commande de copie et vous n'êtes pas en train de calculer l'erreur de clé de cache.
Pour moi, ce n'était pas la réponse (voir la réponse acceptée), merci!
La façon dont Visual Studio le fait est un peu étrange.
Au lieu de lancer docker build
dans le dossier avec le dockerfile, il se lance dans le dossier parent et spécifie le dockerfile avec le -f option.
J'utilisais le projet de démonstration (essayant de créer une solution minimale pour une autre question) et j'ai frappé la même situation.
Le projet de démonstration est
cd \Workerservice2 docker build -f WorkerService2\Dockerfile --force-rm -t worker2/try7 . docker run -it worker2/try7
donc je serais attendre que aille
=> 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
mais j'obtiens votre Message d'erreur.
cd \Workerservice2\WorkerService2 docker build .
Au lieu de cela, accédez au répertoire parent, avec le fichier .sln
et utilisez le docker -f code > Option pour spécifier le dockerfile à utiliser dans le sous-dossier:
\WorkerService2 ("solution" folder) +- WorkerService2.sln +- WorkserService2 ("project" folder) +- DockerFile +- WorkerService2.csproj +- ... other program files
modifier (Merci Mike Loux, Tblev & Goku):
Notez le point final sur la commande docker build
.
Pour docker, la partie finale de la commande est l'emplacement des fichiers avec lesquels Docker travaillera. Habituellement c'est le dossier avec le dockerfile, mais c'est ce qui est différent dans la façon dont VS fait. Dans ce cas, le dockerfile est spécifié avec le -f
. Tous les chemins (comme avec l'instruction Copy
dans le dockerfile) sont relatifs à l'emplacement spécifié. Le .
signifie "répertoire actuel", qui dans mon exemple est \ WorkerService2
.
Je suis arrivé à cette étape en inspectant la sortie du processus de construction , avec la verbosité réglée sur détail. Si vous choisissez des outils / options / projets et des solutions / build et exécutez, vous pouvez ajuster la verbosité de sortie de build, j'ai rendu le mien détaillé.
modifier # 2 Je pense que j'ai travaillé Pourquoi Visual Studio le fait de cette façon. Il permet aux références de projet dans la même solution d'être copiées.
S'il était configuré pour faire docker build
dans le dossier du projet, Docker ne pourrait pas Copier
l'un des autres projets de la solution.
Gah. C'était ce dernier point qui me faisait. J'ai essayé toutes sortes de combinaisons du fichier complet ou un chemin sans le fichier, mais j'ai obtenu le fichier qui n'est pas trouvé
, soit la version docker redoutée nécessite exactement 1 argument
message. Je ne vais pas mentir, apprendre la plus petite chose dans Docker, c'est comme tirer les dents, FFS. Cela fonctionne très bien une fois que vous avez déterminé la syntaxe et les méthodes obscures, mais jusque-là, c'est une tête après l'autre.
Ouais, quel est le point à la fin? Vous spécifiez deux fichiers Docker.
@tblev le '.' À la fin, c'est dire à Docker d'où le répertoire s'écoule, dans ce cas, la racine de la solution plutôt que le projet. Il est prudent cependant, la commande de copie est sensible à la casse et si vous avez votre répertoire de projet nommé de manière incohérente avec la commande (Camel Case, etc.) qui confondera Docker
J'ai eu ce problème, vérifiez simplement votre chemin pour la faute
J'ai eu le même problème, j'ai défini l'environnement Docker sur Windows lors de l'ajout de la prise en charge de Docker. Même en cours d'exécution dans Visual, Studio a jeté une erreur à cela. J'ai changé l'environnement en Linux alors que mon docker s'exécute dans le sous-système Windows pour Linux (WSL).
Ensuite, je suis revenu au terminal pour exécuter les commandes.
J'ai pu résoudre ce problème par Déplacement vers le dossier Solutions (dossier racine).
et j'ai fait docker build
comme ceci:
docker run containername/tag
Ensuite, j'ai fait docker run
:
docker build -t containername/tag -f ProjectFolder/Dockerfile .
L'utilisation d'option -f dans le .SLN-Folder avait déjà été une réponse 10 jours avant cette réponse.
Re "Sous-système Linux pour Windows" : voulez-vous dire Sous-système Windows pour Linux (WSL)?
J'ai eu le même problème. Dans mon cas, un mauvais répertoire était spécifié. Mon dockerfile était:
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
Ensuite, j'ai réalisé que dans la deuxième étape de construction, j'essaie de copier > Xxx
Mais comme je l'ai spécifié WorkDir / App dans la première étape, mes fichiers sont situés dans ce répertoire dans le système de fichiers d'image, donc en modifiant le chemin publier / web
vers app / publish / web
résoudre mon numéro.
donc mon docker de travail final est:
COPY --from=publish publish/web .
J'avais fait face au même problème.
La raison en était que le nom du fichier DLL dans le fichier docker est sensible à la casse.
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 Le nom doit correspondre à votre fichier .csproj.
Dans mon cas, il y avait un espace blanc de fuite sournois dans le nom du fichier.
------ > [3/3] COPY init.sh ./: ------ failed to compute cache key: "/init.sh" not found: not found
Le fichier était donc appelé "init.sh" au lieu de "init.sh". p >
Cela se produit également lorsque vous ne fournissez pas le chemin approprié vers votre entrée de commande de copie. L'indice le plus important que j'ai eu est que la commande WorkDir ouvre un dossier pour le conteneur, pas dans l'Explorateur Windows (donc cela n'affecte pas le chemin que vous devez spécifier pour la commande Copy).
La commande suivante échoue avec Échec de la touche de cache: pas trouvé
:
docker build -t tag-name:v1.5.1 -f Dockerfile .
En modifiant la commande en ce qui suit, il a été corrigé: p >
docker build -t tag-name:v1.5.1 - <Dockerfile
Dans mon cas, Je faisais une erreur dans '/' et ''. Laisse-moi expliquer Ouvrez votre dockerfile (il doit être nommé uniquement dockerfile, pas dockerfile ou dockerfile). Vous pouvez avoir quelque chose comme ça- de mcr.microsoft.com/dotnet/runtime:5.0 copier bin \ release \ net5.0 \ publish. Entrée [dotnet "," hellodocker.dll "]
remplacer copier bin \ release \ net5.0 \ publish. à copier bin / release / net5.0 / publier.
Erreur: Impossible de calculer la clé de cache: "SRC" INTORSSIBLE: Non trouvé
Dans mon cas, dossier / fichier exclu dans .dockerignore
Vous m'avez sauvé de certaines folies. MERCI!
Dans mon cas, j'avais quelque chose comme ceci:
FROM mcr.microsoft.com/dotnet/aspnet:5.0 COPY bin/Release/net5.0/publish/ app/ WORKDIR /app ENTRYPOINT ["dotnet", "MyApi.dll"]
et j'ai finalement réalisé que j'avais le dossier bin dans mon fichier .dockerignore. p >
Dans mon cas, c'était un mauvais construire avec Path Configuration par ex. Docker build context
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
docker { dependsOn build dependsOn dockerFilesCopy name "${project.name}:${project.version}" files "build" // path to build context }
docker build .
Dans mon cas, avec un projet angulaire, mon projet était dans le dossier appelé Ex: My-Folder-Project et je mettais Dockerfile Copy --From = publish app / dist / my-folder-project. Mais bien sûr, la bonne chose est de mettre le "nom" dans votre package.json comme la copie --from = publier app / dist / name-in-package.json.
C'est du travail pour moi stackoverflow.com/a/63257667/15203500
Veuillez ne pas publier de photos, de code de format à l'aide de la fonction "Code".