2017-02-20 18 views
3

私は最初のドッカーwebapiプロジェクトを作成するのにthis tutorialを使用しました。dotnet aspnetcore docker buildが145エラーコードで失敗する

私はWindows 7(ドッカーツールボックス)を使用しています。

この私が走ってきたもの:

dotnet new webapi 

この

は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"] 

これは、私がイメージ作成方法です:

docker build -t mydemos:aspnetcorehelloworld . 

をそして、これは私どのようにですコンテナを作成して実行しました:

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

サービスがドッキング用のコンテナとして正常に実行されました。

はその後、私はaspnetcoreベース画像上で動作するようにDockerfileを変えてみました:新しいDockerfileがどのように見える

FROM microsoft/dotnet:latestFROM microsoft/aspnetcore:1.0.1

に変更されました:今

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"] 

、私は」

docker build -t mydemos:aspnetcorehelloworld1 . 
を使用して新しい画像を作成しようとしました

そしてエラーが発生します。
これは、ビルドログです:

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 

私は、URLに入ったものを再インストールし、私はまだエラーを取得します。
同じコマンドラインセッションでdotnet cliコマンドを使用しようとしましたが、成功しました(dotnet restoreが機能します)。

私はこのエラーを回避しようとしましたが、本当に解決策が見つかりませんでした。

私はここで何が欠けていますか?私はこの145エラーを複数の機会やテストで得ています。

答えて

4

使用しているイメージには、SDKではなく.NETコアランタイムのみが含まれています。以下のリポジトリからベースイメージをお試しください:

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


あなたDockerfileがそれに次の行を持っている:dotnet restoredotnet buildコマンドは、画像内で実行されていることを意味

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

あなたは使用しています。使用しているイメージにはSDKがインストールされていないため、これらのコマンドは見つからず、見た目にも失敗します。上にリンクされたリポジトリのイメージにはSDKがインストールされているので、dotnet restoredotnet buildコマンドを見つけて実行できます。

SDKをインストールしてベースイメージを使用する代わりに、開発マシンでビルド/パブリッシュプロセスを実行し、公開された出力をイメージに単純にコピーすることもできます。今、画像内で実行dotnetコマンドは単にあなたの(事前に構築された)DLLを実行するものです

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

注:お使いのDockerfileは、唯一の線に沿って何かを見てする必要があります。これには、SDKではなくランタイムのみが必要です。

+0

答えに感謝しますが、私に何かを理解させてください。私は必要なランタイムを含む別のドッカー画像に基づいてドッカー画像を構築しようとしています。ビルドプロセスにSDKが必要であることは理解していますが、SDKを含むベースイメージが必要なのはなぜですか? –

+0

@AmirPopovich私は答えにいくつかの詳細を追加しました。他に質問がある場合はお知らせください。 – Polynomial

+0

すばらしい説明!!!どうもありがとうございました。最後の質問:ランタイムとSDKのみを含む小さな画像はありますか?ドッカーファイルに2つのFROMコマンドを追加する方法はありますか? –