如何在asp.net core 3.1中覆盖docker中的appsetting值?
我做了一个asp.net核心项目,但我有一个问题,容器构建后如何覆盖应用程序设置值? 我的应用程序设置:如何在asp.net core 3.1中覆盖docker中的appsetting值?,docker,asp.net-core,Docker,Asp.net Core,我做了一个asp.net核心项目,但我有一个问题,容器构建后如何覆盖应用程序设置值? 我的应用程序设置: "AppSetting": { "RabbitMqUrl": "rabbitmq://localhost/", "RabbitMqUserName": "guest", "RabbitMqPassword": "guest",
"AppSetting": {
"RabbitMqUrl": "rabbitmq://localhost/",
"RabbitMqUserName": "guest",
"RabbitMqPassword": "guest",
"LoginMessage": "x",
"ResetPasswordMessage": "x",
"myval": 10
}
我找到了这个命令,但我想在容器运行时查看并更改myval值,例如在RestartContainer命令中,如何处理这些项
docker run -it -p 5005:5005 -e "AppSetting:myval=123" identity
更新:经过一些澄清后,问题是关于更改环境变量的运行时。这不是一个好主意。对于共享可能更改的应用程序范围的变量,缓存是一个可行的解决方案 在StartupConfigureServices中
services.AddDistributedMemoryCache();
然后你可以注射
IMemoryCache
输入代码。您可以像这样添加/更改缓存值
_cache.Set("myval", 123, DateTimeOffset.MaxValue);
var myVal = 0;
if (_cache.TryGetValue("myval", out int value))
{
myVal = value;
}
ENV ASPNETCORE_ENVIRONMENT Production
ENV ASPNETCORE_myval 123
并且该值将保留在缓存中,直到时间结束或代码更改/删除它。您可以像这样从缓存中获取数据
_cache.Set("myval", 123, DateTimeOffset.MaxValue);
var myVal = 0;
if (_cache.TryGetValue("myval", out int value))
{
myVal = value;
}
ENV ASPNETCORE_ENVIRONMENT Production
ENV ASPNETCORE_myval 123
如果需要使用appsettings.json中的某个值初始化缓存,可以在构建webHost之后、调用webHost.Run/webHost.RunAsync之前在ProgramMain内部完成
更新结束
除非您有一个名为AppSetting的类,否则json应该如下所示。您应该有一个适用于所有环境的appsettings.json,一个appsettings.Staging.json用于Staging,一个appsettings.Production.json用于生产
{
"RabbitMqUrl": "rabbitmq://localhost/",
"RabbitMqUserName": "guest",
"RabbitMqPassword": "guest",
"LoginMessage": "x",
"ResetPasswordMessage": "x",
"myval": 10
}
在Docker文件中选择running Environment,如下所示
_cache.Set("myval", 123, DateTimeOffset.MaxValue);
var myVal = 0;
if (_cache.TryGetValue("myval", out int value))
{
myVal = value;
}
ENV ASPNETCORE_ENVIRONMENT Production
ENV ASPNETCORE_myval 123
您可以像这样覆盖appsettings.json中的参数
_cache.Set("myval", 123, DateTimeOffset.MaxValue);
var myVal = 0;
if (_cache.TryGetValue("myval", out int value))
{
myVal = value;
}
ENV ASPNETCORE_ENVIRONMENT Production
ENV ASPNETCORE_myval 123
如果您坚持使用原始JSON结构:
ENV ASPNETCORE_AppSetting__myval 123
感谢roar,我希望在运行时更改此值,或者像docker run-it-p 5005:5005-e AppSetting:myval=123 identity这样的命令,我不想从我的图像创建新实例,但要在当前容器上应用此更改。@Ali.goodarzi:好的,很抱歉误解。但是你不应该这样做,设置是静态的,用于启动和运行应用程序。我将用更多代码更新我的答案。