2017-01-04 5 views
2

ドッカーコンテナに既にコンパイル済みのAspnetコア1.1アプリケーションがあるフォルダをマウントするという考えがあります。OSXのドッカーコンテナにDotnet Antiforgery DLLがありません

私はファイルが見つからないときにこれを行います。それを作る最善の方法は何か...欠けていない?問題を再現する方法

私のOSXのホストで

私はハロー世界のWebアプリを作成して開始するフォルダ/myrootedpath/TheApp

dotnet new -t web 
dotnet restore 
dotnet run 

を作成します。
(私はcurl localhostだから私はそれがホストで動作することを知っている)
私はctrl-cでサーバを停止します。

私はその後、前述のフォルダをマウントコンパイルし

docker run -p 80:80 -ti \ 
    -v /myrootedpath/TheApp:/theapp microsoft/dotnet \ 
    /bin/bash -c 'cd /theapp; dotnet run' 

を通じてWebサーバを起動しますが、それは

プロジェクトtheapp(.NETCoreApp、バージョン= V1.1で停止したコンテナを作成)は以前にコンパイルされました。コンパイルをスキップします。

エラー:マニフェストの依存関係に指定されたアセンブリが見つかりませんでした - パッケージ: 'Microsoft.AspNetCore.Antiforgery'、バージョン '1.0.1'、パス「のlib/netstandard1.3/Microsoft.AspNetCore.Antiforgery .dll '

私はAntiforgery.dllが見当たりません。
私はそれを見つけてそれをコピーして新しいイメージを作成することができます。
これはお勧めの解決策ですか?

UPDATE

私は質問が容器の外にコンパイルDOTNETコアコードを実行するために必要とされているものに帰着することを明確にしたいの恩恵を開始したよう。

答えて

2

dotnet restore(私のWinマシン上)を実行すると、パッケージがプロジェクトフォルダにはダウンロードされず、コピーされていると表示されますが、<userhome>/.nuget/packages/にコピーされます。

dotnet restoredotnet runは、依存関係をコピーせずにアプリケーション自体をコンパイルするだけなので)、あなたのドッカーイメージにはまだホストにダウンロードしたパッケージはありません。

あなたはする必要があります

  1. 「すぐに実行」DISTRIBを作成するためにdotnet publishを使用し、コンテナで実行します。依存関係を変更すると(毎回)、少なくとも1回ドッカーイメージ内にdotnet restoreを実行してください。
  2. 、またはホストシステムからドッカーにマップするpackages packagesフォルダー。
+0

私は 'dotnet publish'コマンドを試して、結果を得ました。しかし、 'project.json'がないので、私の' dotnet run'は失敗しました。 – LosManos

+0

はい。 'dotnet publish'の後に' dotnet myapp.dll'を実行してください。そして、あなたはこれのためにSDKを必要としません、ランタイムで十分です。 – Dmitry

関連する問題