[英]how does a variable in appsetting.json get swapped with actual value?
在一些 asp.net 核心项目中,我经常在 appsetting.json 文件中看到类似这样的内容:
{
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"UserName" : "${userName}"
}
${userName}
看起来像一个可以被 docker/k8s 等交换的变量模板,但它是如何工作的,因为在应用程序内部,我仍然访问 UserName 为:
var userName = _configuration["UserName"]; // output is "${userName}"
那么 docker 是否更改了变量模板? 它是否直接更新appsetting.json文件,例如docker将使用dockerfile中的ENV值扫描appsetting.json文件并将${userName}
替换为实际值?
这看起来像是针对 appsettings.json 中的“用户名”键存储的内插字符串。
您将依赖代码(C# 等)在运行时替换用户名值,而不是与容器运行时有任何关系。
当通过各种替代方案(Docker、Docker Compose、Kube.netes 等)实例化容器时,您将在创建容器时传入环境变量(在 K8s 的情况下是 pod)。
这(环境变量的注入)是如何完成的取决于你如何启动你的容器。 想法是一样的,但语法可能会有所不同,具体取决于您使用的是“docker run”、“docker compose”还是“kube.netes”等。但原理是一样的。
在 .NET 核心容器的情况下,您将依赖“优先顺序”来导出 ConfigurationManager 的值,例如https://devblogs.microsoft.com/premier-developer/order-of-precedence-when -配置-asp.net-核心/
容器不会修改/注入/交换已部署容器中的底层代码库。
但是,它们可以在实例化时将环境变量注入到容器/pod 中。
不确定我是否正确解释了您的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.