使用环境变量覆盖 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
我的 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