web-dev-qa-db-ja.com

Dockerの.NET CoreアプリのappSettings.json?

Dockerコンテナーで.netコアアプリを実行しています。ここに私のドッカーファイルがあります(単に開発環境を構築するためです):

FROM Microsoft/dotnet:1.0.1-sdk-projectjson 
ENV ASPNET_ENV Development
COPY bin/Debug/netcoreapp1.0/publish/ /root/
EXPOSE 5000/tcp
ENTRYPOINT dotnet /root/AVP.WebApi.dll

/ publish /フォルダーにappSettings.Development.jsonファイルがあります。このDockerファイルをビルドして実行すると、.NETアプリが起動に必要なappsettingsを見つけられないという奇妙な問題が発生します(これらはappSettings.Development.jsonファイルにあります)。

Windowsのコマンドラインからdotnet publish/AVP.WebAPI.dllを実行すると、構成設定がない場合にアプリが同じ例外をスローすることを確認しました。ただし、/ publishにcdしてdotnet AVP.WebAPI.dllを実行すると、アプリが起動して正常に実行されます。

Dockerファイルを変更してappSettings.Development.jsonの値でアプリを適切に実行する方法はありますか? (私はまた、すべての値を通常のappSettings.jsonファイルにコピーし、運が悪い状態でアプリを実行しようとしました)

また、/ rootの代わりに/に対してCOPYコマンドを実行し、エントリポイントとしてdotnet AVP.WebApi.dllを実行しようとしましたが、その結果、プロジェクトは依存関係を見つけることができなくなりました。

9
Sam Ellis

皆へのフォローアップとして(私はこれを最初にコメントしました)、これは最終的にそれを修正したものです:

Dotnetはappsettingsファイルが実行されているのと同じディレクトリにあることを期待しているように私が言うことができることから。そこで、COPY bin/Debug/netcoreapp1.0/publish/appsettings.json /appsettings.jsonをdockerfileに追加しました(この行は、appsettingsファイルを/ root /の下のディレクトリにコピーします。ここで、publishフォルダーをコピーしました)。この時点ですべてが機能し始めました。 dotnet実行可能ファイルは/ root /の下のディレクトリから実行されるため、以前は見つけることができなかったようです。appsettingsが同じフォルダーにあるため、問題ありません。

5
Sam Ellis

この行を置き換えてみてください:

ENV ASPNET_ENV Development

これとともに:

ENV ASPNETCORE_ENVIRONMENT Development

元の環境変数名は古い.NET Coreで使用されていましたが、変更されています。 .NET Coreの最初の開始以降に起こったすべての変更のため、これは苦痛なチュートリアルなどになる可能性があります。

Project.jsonファイルから始めないでください!

より詳しい情報:

https://docs.Microsoft.com/en-us/aspnet/core/fundamentals/configurationhttps://docs.Microsoft.com/en-us/aspnet/core/基本/環境

10
Andrew S

Appsettingsが見つからない理由は3つ考えられます。

  1. それらはコンテナーの正しいフォルダーにありません(公開フォルダーをコピーし、公開フォルダーにappsettingが含まれていますか?
  2. StartupClassで環境のappsettingsを使用して定義していません:appSettings.${Environment}.json
  3. Windowsファイルシステムでは大文字と小文字が区別されず、Linuxでは大文字と小文字が区別されるため、ファイルは見つかりません。 (大文字を確認してください)。
1
Joel Harkes

私がこの問題に遭遇したばかりで、問題はファイルがデフォルトでコピーされていないことでした。

これは、.csprojファイルを編集して以下を追加することで修正されました。

  <ItemGroup>
    <None Update="appsettings.json">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </None>
  </ItemGroup>

これは、Visual Studio内のappsettingsファイルを右クリックし、プロパティを選択してsopy to directoryを "Always"に設定することにより、UIからも実行できます。

0
Wilcko

私はこの問題に自分でぶつかっただけで、サムの答えはそれを解決しました。別のソリューションを提案するために、WORKDIR /rootディレクティブをDockerfileで指定し、ENTRYPOINT dotnet AVP.WebApi.dllこれは、ルートディレクトリのコンテキストでdotnetを呼び出します。

完全なDockerfile:

FROM Microsoft/dotnet:1.0.1-sdk-projectjson 
ENV ASPNET_ENV Development
COPY bin/Debug/netcoreapp1.0/publish/ /root/
WORKDIR /root
EXPOSE 5000/tcp
ENTRYPOINT dotnet AVP.WebApi.dll
0
Matthias Bruzek