web-dev-qa-db-ja.com

ENV変数でappsettings.jsonにキーを設定する-ASP.NET Core 3.1 Docker

私は.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 ....

2
user1574598

たとえば、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

2
mtkachenko