私は.NET Core Web APIを使用しており、ENV変数を使用してappsetttings.json
にキーを設定する方法を見つけようとしています。これにより、Dockerコンテナーを作成するときにデータを入力できます。
これまでのところ、テストコントローラーにIOptions<>
を挿入することができ、アプリが現在コンテナーでまだ実行されていないため、NULLであった値をデバッグできました。
テストコントローラー:
namespace TestWebApplication.Controllers
{
[ApiController]
[Route("api/")]
public class TestController : ControllerBase
{
private readonly IOptions<EnvironmentConfiguration> _environmentConfiguration;
public TestController(IOptions<EnvironmentConfiguration> environmentConfiguration)
{
_environmentConfiguration = environmentConfiguration;
}
[HttpGet]
[Route("testmessage")]
public ActionResult<string> TestMessage()
{
var test = _environmentConfiguration.Value;
return Ok($"Value from EXAMPLE_1 is {test.EXAMPLE_1}");
}
}
}
環境構成:
namespace TestWebApplication.Models
{
public class EnvironmentConfiguration
{
public string EXAMPLE_1 { get; set; }
public string EXAMPLE_2 { get; set; }
}
}
いくつかの古いチュートリアルを実行した後、これを機能させるために、実際にConfigureServices
にコードを配置する必要がないことに気付きました。
たとえば、appsettings.json
のこの部分があるとします。
"eureka": {
"client": {
......
},
"instance": {
"port": "xxxx",
"ipAddress": "SET THIS WITH ENV",
}
}
環境変数を設定してipAddress
を設定する方法を教えてください。Dockerに移動すると、次のように実行します。
docker run .... -e EXAMPLE_1 -e IP_ADDRESS ....
たとえば、appsettings.json
にセクションがあるとします。
{
"Section1" : {
"SectionA": {
"PropA": "A",
"PropB": "B"
}
}
}
そしてクラス:
public class SectionA
{
public string PropA { get; set; }
public string PropB { get; set; }
}
Startup.cs
で、クラスをセクションにマップして、IOptions<SectionA>
を挿入できるようにします。
services.Configure<SectionA>(Configuration.GetSection("Section1:SectionA"));
次に、環境変数の命名規則Section1__SectionA__PropA
を使用して、SectionA
のプロパティをオーバーライドできます。
これも読んでください https://docs.Microsoft.com/en-us/aspnet/core/fundamentals/configuration/?view=aspnetcore-3.1#keys