使用环境变量覆盖 appsettings.json 数组

Override appsettings.json Array With Env Variable

我的 appsettings.json:

中有这个数组
  "ServiceDefinitions": [
    {
      "Name": "encryption-api",
      "Url": "http://localhost:5032",
      "ApiKey": "",
      "ExposedEndpoints": [
        "encrypt",
        "decrypt"
      ]
    }
  ],

我希望能够使用环境变量覆盖它。我已经像这样将环境变量添加到配置生成器中,这似乎适用于其他值:

builder.Configuration.AddEnvironmentVariables();

然后我尝试在我的 Docker Compose 文件中设置它:

environment:
      - ASPNETCORE_URLS=http://gateway:8080/
      - ServiceDefinitions="{\"Name\":\"encryption-api\",\"Url\":\"http://encryption-api:80\",\"ApiKey\":\"\",\"ExposedEndpoints\":[\"encrypt\",\"decrypt\"]}"

但是,它仍然从 json 文件而不是环境变量中获取值。我也试过将它设置在 [] 内,但这没有什么区别。

我该怎么做?

Microsoft docs 关于应用配置。

您需要确保您的 Json 提供程序在您的环境变量提供程序之前注册。然后您需要在 Docker 文件中设置环境变量,如下所示:

environment:
      - ASPNETCORE_URLS=http://gateway:8080/
      - ServiceDefinitions__0__Name="encryption-api"
      - ServiceDefinitions__0__Url="http://encryption-api:80"
      - ServiceDefinitions__0__ApiKey=""
      - ServiceDefinitions__0__ExposedEndpoints__0="encrypt"
      - ServiceDefinitions__0__ExposedEndpoints__1="decrypt"

当 运行 图像时,我们可以使用 -e 标志覆盖 Docker 文件中设置的环境变量:

Docker run -e "ServiceDefinitions=encryption-api" myimage

官方文档: ASP.NET Core and Docker Environment Variables