1

Je crée une application dotnetcore 2.0 simple et je veux la conteneuriser. L'idée étant que ce conteneur sera exécuté une fois en déploiement pour effectuer certaines tâches de configuration d'application.Erreurs de conteneur Dotnetcore au démarrage demandant si je veux exécuter des commandes SDK

À l'heure actuelle, le code fait exactement ce ...

class Program 
{ 
    static void Main(string[] args) 
    { 
     Console.WriteLine("Hello World!"); 
    } 
} 

Le fichier docker ressemble à ceci ...

FROM microsoft/dotnet:2.0-runtime 
ARG source 
WORKDIR /app 
COPY ${source:-obj/Docker/publish} . 
ENTRYPOINT ["dotnet", "consoleapp.dll"] 

je frappe F5 dans Visual Studio 2017 et je peux voir par faire une commande docker image ls que le conteneur existe.

je tente ensuite d'exécuter le conteneur comme suit:

docker run consoleapp: dev

Je reçois maintenant l'erreur:

Did you mean to run dotnet SDK commands? Please install dotnet SDK from: 
    http://go.microsoft.com/fwlink/?LinkID=798306&clcid=0x409 

Ma pensée sur ce que parce que je suis en utilisant une image d'exécution à baser mon image sur, je devrais pouvoir en quelque sorte commencer mon application. Je suppose que l'erreur ici est que dotnet qui fait partie de mon point d'entrée fait partie du SDK dotnet et n'est donc pas dans mon image de base.

Dois-je baser ce conteneur sur une version non exécutable du cœur dotnet?

Répondre

0

Une raison pour laquelle vous pouvez voir ce message d'erreur est lorsque l'argument passé à dotnet est inconnu.

Le runtime ne reconnaît pas l'argument que vous lui transmettez et se demande si vous devriez utiliser le sdk à la place.

Assurez-vous que le nom de la dll et le chemin d'accès sont corrects dans:

ENTRYPOINT ["dotnet", "consoleapp.dll"] 

Aussi, assurez-vous que l'instruction fonctionne COPY comme prévu.

Dans votre exemple, il s'agit de choisir des fichiers à partir du dossier obj/Docker/publish. La sortie prête à être exécutée doit sortir du dossier bin à la place. Si vous utilisez la version publiée, veillez à exécuter dotnet publish avant de créer le conteneur. Ou restaurer/construire/publier lors de la création de l'image.

Rappelez-vous que la DLL devrait se terminer exactement au WORKDIR. Dans votre cas:/app Sauf si vous fournissez le chemin d'accès dotnet

J'ai créé un basic working sample on Github:

0

Créer une application:

dotnet new console -o myApp 
cd myApp/ 
dotnet publish -o publish -r linux-x64 
# add docker file (see below) 
docker build . -t myapp:latest 
docker run --rm myapp:latest 

Dockerfile:

FROM microsoft/dotnet:2-runtime 
WORKDIR /opt/myapp 
ADD publish . 
ENV PATH="/opt/myapp:${PATH}" 
CMD ["myApp"]