2017-02-20 1 views
3

J'ai utilisé this tutorial pour créer mon premier projet webapi docker. J'utilise Windows 7 (boîte à outils docker)La construction du docker aspnetcore dotnet échoue avec un code d'erreur 145

Ce que j'ai couru:

dotnet new webapi 

C'est le Dockerfile:

FROM microsoft/dotnet:latest 
COPY . /app 
WORKDIR /app 

RUN ["dotnet", "restore"] 
RUN ["dotnet", "build"] 

EXPOSE 5000/tcp 
ENV ASPNETCORE_URLS http://*:5000 

ENTRYPOINT ["dotnet", "run"] 

Voici comment j'ai créé l'image:

docker build -t mydemos:aspnetcorehelloworld . 

Et voilà comment je avez créé et couru le conteneur:

docker run -d -p 8080:5000 -t mydemos:aspnetcorehelloworld 

Mon service s'est correctement exécuté en tant que conteneur docker.

Ensuite, j'ai essayé de changer le Dockerfile de travailler sur une image de base aspnetcore:

FROM microsoft/dotnet:latest a été changé pour FROM microsoft/aspnetcore:1.0.1

Le nouveau Dockerfile ressemble à:

FROM microsoft/aspnetcore:1.0.1 
COPY . /app 
WORKDIR /app 

RUN ["dotnet", "restore"] 
RUN ["dotnet", "build"] 

EXPOSE 5000/tcp 
ENV ASPNETCORE_URLS http://*:5000 

ENTRYPOINT ["dotnet", "run"] 

Maintenant, je J'ai essayé de construire la nouvelle image en utilisant

docker build -t mydemos:aspnetcorehelloworld1 . 

Et j'obtiens une erreur.
Ceci est le journal de construction:

Sending build context to Docker daemon 636.9 kB 
Step 1/8 : FROM microsoft/aspnetcore:1.0.1 
---> 2c7bbc508bb2 
Step 2/8 : COPY . /app 
---> Using cache 
---> 1d5b9bd908b3 
Step 3/8 : WORKDIR /app 
---> Using cache 
---> c1d5d091d111 
Step 4/8 : RUN dotnet restore 
---> Running in 8399e21caeb2 
Did you mean to run dotnet SDK commands? Please install dotnet SDK from: 
    http://go.microsoft.com/fwlink/?LinkID=798306&clcid=0x409 
The command 'dotnet restore' returned a non-zero code: 145 

Je suis entré dans l'url, des trucs et réinstallées je reçois encore une erreur.
J'ai essayé d'utiliser les commandes dotnet cli dans la même session de ligne de commande et je réussis (dotnet restore fonctionne).

J'ai essayé de rechercher cette erreur, mais je n'ai pas vraiment trouvé de solution.

Qu'est-ce qui me manque ici? Je reçois cette erreur 145 à plusieurs reprises et tests.

Répondre

4

L'image que vous utilisez contient uniquement l'environnement d'exécution .NET Core et non le SDK. Essayez une image de base du référentiel suivant:

https://hub.docker.com/r/microsoft/aspnetcore-build/


Votre Dockerfile a les lignes qu'il suit:

RUN ["dotnet", "restore"] 
RUN ["dotnet", "build"] 

Ce qui signifie que les commandes sont en cours d'exécution dotnet restore et dotnet build dans l'image tu utilises Comme l'image que vous utilisez n'a pas le SDK installé, ces commandes ne peuvent pas être trouvées et échouent comme vous le voyez. Les images dans le référentiel I lié ci-dessus ont le SDK installé en leur sein et ainsi les commandes dotnet restore et dotnet build peuvent être trouvées et exécutées.L'alternative à l'utilisation d'une image de base avec le SDK installé serait d'effectuer le processus de construction/publication sur votre machine de développement, puis de simplement copier la sortie publiée dans l'image. Votre Dockerfile aurait seulement besoin alors de regarder quelque chose le long des lignes de:

FROM microsoft/aspnetcore:1.0.1 
WORKDIR /app 
COPY ./app . 
ENTRYPOINT ["dotnet", "TheNameOfYourProject.dll"] 

Notez que maintenant les exécuter dotnet commandes dans l'image est tout simplement celui qui exécute votre DLL (pré-construit). Cela nécessite uniquement l'exécution et non le SDK.

+0

Merci pour la réponse, mais laissez-moi comprendre quelque chose. J'essaye de construire une image de docker basée sur une autre image de docker qui contient l'exécution dont j'ai besoin. Je comprends que le processus de construction a besoin du SDK, mais pourquoi ai-je besoin d'une image de base qui contient le SDK? –

+0

@AmirPopovich J'ai ajouté plus de détails dans la réponse, laissez-moi savoir si vous avez d'autres questions. – Polynomial

+0

Bonne explication !!! Merci beaucoup. Dernières questions: Y a-t-il une image plus petite qui ne contient que le runtime et le SDK? Est-il possible que je puisse ajouter 2 commandes FROM dans mon fichier docker? –