[英]How to correctly store connection strings in environment variables for retrieval by production ASP.Net Core MVC applications
[英]asp.net core override connection strings via ENV variables
我有一个 asp.net 核心 API 2.2 实现。 我创建了一个 docker 图像。 我想覆盖 appsettings.json 文件中的连接字符串。
有什么办法吗? 当我使用命令docker container run -e "ConnectionStrings:DefaultConnection={...here goes the connection string}"
启动容器时,我尝试通过环境变量
我还有builder.AddEnvironmentVariables();
在我的 Startup.cs 中,但我的 appsetting.json 中的连接字符串未被替换。
我在容器中检查了它,appsetting.json 在那里,但值没有被替换。
任何其他方式如何做这种情况? 谢谢。
appsetting.json从未更改,但是根据层次结构,变量值将被覆盖。 在https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/configuration/?view=aspnetcore-2.2#conventions上查看示例。 效果很好。 也许只是为了确保您不会因为命令行执行而中断某些操作,您可以尝试通过docker-compose分配环境变量。 经验法则是,您用于“键”的模式必须与json文件中的模式匹配(在__
而不是:
的帮助下),以便它被覆盖。
对于-e
,它将覆盖系统环境,该环境将在您从代码中检索时更改连接appsettings.json
,并且不会影响appsettings.json
的内容。
例如
假设您有一个类似的appsettings.json
{ "ConnectionStrings": { "DefaultConnection": "Server=(localdb)\\\\mssqllocaldb;Database=aspnet-TestDockerConfiguration-416C6FD2-3531-42D6-9EDE-18AC45901208;Trusted_Connection=True;MultipleActiveResultSets=true" }, "Logging": { "LogLevel": { "Default": "Warning" } }, "AllowedHosts": "*" }
通过_configuration.GetConnectionString("DefaultConnection")
连接_configuration.GetConnectionString("DefaultConnection")
例如
public class HomeController : Controller { private readonly IConfiguration _configuration; public HomeController(IConfiguration configuration) { _configuration = configuration; } public IActionResult Index() { return Ok(_configuration.GetConnectionString("DefaultConnection")); //return View(); } }
对于docker run -it -p 8888:80 dockerconfiguration
,它将返回"Server=(localdb)\\\\mssqllocaldb;Database=aspnet-TestDockerConfiguration-416C6FD2-3531-42D6-9EDE-18AC45901208;Trusted_Connection=True;MultipleActiveResultSets=true"
索引动作
对于docker run -it -p 8888:80 dockerconfiguration -e "ConnectionStrings:DefaultConnection"="testsqlstring"
,它将返回testsqlstring
因此,如果您只想在运行时覆盖appsettings.json
中的值, appsettings.json
只需指定类似步骤4
如果您想更改docker容器中的appsettings.json文件,可以按照以下步骤操作
apt-get install vim -y
安装vi
命令 docker exec -it 43ea835776dd /bin/bash
进入容器 ls
列出文件并找到appsettings.json
vi appsettings.json
修改内容 cat appsettings.json
检查内容是否更改 exit
并访问Home/Index
以检查结果。 尝试不使用 ConnectionStrings 部分的引号,它工作正常(在 PowerShell 控制台上。
docker run -d -p 8080:80 --name letscosmosweb -e ConnectionStrings__ProductsDbContext=$key letscosmosweb:v1
$key
变量包含连接字符串
如果您使用的是docker-compose
除了在.env
中指定变量外,不要忘记也在docker-compose.yml
的environments
部分中设置它。 它让我:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.