Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在asp.net core 3.1中覆盖docker中的appsetting值?_Docker_Asp.net Core - Fatal编程技术网

如何在asp.net core 3.1中覆盖docker中的appsetting值?

如何在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",

我做了一个asp.net核心项目,但我有一个问题,容器构建后如何覆盖应用程序设置值? 我的应用程序设置:

  "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:好的,很抱歉误解。但是你不应该这样做,设置是静态的,用于启动和运行应用程序。我将用更多代码更新我的答案。