3 votes

Vous obtenez le message suivant : "Vouliez-vous exécuter les commandes dotnet SDK ? Veuillez installer dotnet SDK à partir de "

J'essaie de conteneuriser une application .net MVC, mais lorsque je lance l'image, j'obtiens l'erreur suivante

user@tuser:~/sam/WebApp$ docker run -p 8000:80 sam:latest

Voulez-vous dire exécuter les commandes dotnet SDK ? Veuillez installer dotnet SDK à partir de : https://go.microsoft.com/fwlink/?LinkID=798306&clcid=0x409

user@user:~/sam/WebApp$

Et mon Dockerfile ressemble à

FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base
WORKDIR /app
COPY /bin/Release/Publish /app
ENTRYPOINT ["dotnet", "WebApp.dll"]

Où est-ce que je me trompe ?

0voto

Kitty Quinn Points 51

Réponse tardive, mais question assez courante, donc je vais y répondre.

Cela se produit généralement si l'argument de ciblage de la dll dans votre point d'entrée n'existe pas. Il existe d'autres possibilités si vous exportez, goudronnez et réimportez des ressources, mais ce n'est probablement pas ce dont il s'agit ici.

Dans votre cas, l'opération de copie pointe vers un emplacement de fichier relatif Root. Je suppose que vous ne publiez pas dans {system Root/}bin/Release/Publish, et que votre dockerfile est situé dans le Root de votre projet.

Pour résoudre ce problème, vous devez effectuer les opérations de copie par rapport au répertoire dans lequel se trouve votre fichier docker, et spécifier les opérations de copie en utilisant un chemin relatif au répertoire (./etc).

Exemple qui fonctionne d'après mes essais :

FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base
WORKDIR /app
COPY ./bin/Release/Publish /app
ENTRYPOINT ["dotnet", "WebApi.dll"]

Pour voir si cela fonctionne, examinez le conteneur résultant en le lançant avec une commande cmd :

docker run -it --rm sam:latest /bin/sh
...
pwd #ensure workdir is app
ls -la #ensure that your application is copied here

Si vous souhaitez approfondir vos recherches, vous pouvez utiliser docker run pour remplacer votre point d'entrée et expérimenter différentes configurations de lancement pour voir le résultat. Les commandes dont vous aurez besoin sont les suivantes :

docker run -it --rm --entrypoint {dotnet executable} {image}:{tag} {non-existent dll}

Exemple de résultat lorsque l'on cible une dll inexistante via une surcharge sur un conteneur qui fonctionne par ailleurs :

 docker run -it --rm --entrypoint dotnet sam:latest weebles.dll
Did you mean to run dotnet SDK commands? Please install dotnet SDK from:
  https://go.microsoft.com/fwlink/?LinkID=798306&clcid=0x409

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X