Comment éviter l'erreur Docker "failed to compute cache key: not found" avec Visual Studio sur Windows ?

L'environnement de développement Visual Studio Code permet de manipuler de nombreux outils et langages de programmation grâce à ses plugins. Il peut manipuler le système de gestion de containers Docker grâce au plugin "Docker". Une fois le plugin installé, on peut utiliser des commandes de Docker directement depuis la palette de commandes et on peut voir la coloration syntaxique pour le fichier "Dockerfile", le fichier de configuration des containers. Si, lors de l'utilisation de votre image Docker générée par Visual Studio Code, vous obtenez le message d'erreur "failed to compute cache key: not found", le souci vient de la structure de votre projet.

Le souci le plus souvent rencontré vient de la façon dont Visual Studio structure ses projets. Dans le dossier de votre solution, vous avez le fichier ".sln", qui sert à paramétrer la solution dans l'environnement de développement, et à côté le dossier du projet, avec à l'intérieur le fichier "DockerFile".

- MonProjet (dossier de la solution)
    - MonProjet.sln
    - MonProjet (dossier contenant le projet)
        - DockerFile
        - Fichiers de code

Lorsque vous utilisez la commande "docker build", vous vous placez dans le dossier du projet, dans lequel se situe le fichier "DockerFile". C'est l'absence du fichier de paramétrage de la solution qui va provoquer l'affichage du message d'erreur lorsque vous allez essayer d'utiliser votre image. Vous devez donc vous placer dans le dossier de la solution, et utiliser l'option "-f", qui permet d'indiquer l'emplacement du fichier "DockerFile".

cd \MonProjet
docker build -f MonProjet\DockerFile

Il existe une autre cause possible qui conduit à l'affichage du message d'erreur. Vous devez vérifier le contenu de votre fichier ".dockerignore". Ce fichier indique des fichiers qui ne sont pas utilisés lors de la construction du container. Il est possible qu'un ou plusieurs fichiers soient essentiels pour utiliser l'image et soient indiqués dans le fichier.

Divers