繁体   English   中英

asp.net 核心通过 ENV 变量覆盖连接字符串

[英]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的内容。

例如

  1. 假设您有一个类似的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": "*" } 
  2. 通过_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(); } } 
  3. 对于docker run -it -p 8888:80 dockerconfiguration ,它将返回"Server=(localdb)\\\\mssqllocaldb;Database=aspnet-TestDockerConfiguration-416C6FD2-3531-42D6-9EDE-18AC45901208;Trusted_Connection=True;MultipleActiveResultSets=true"索引动作

  4. 对于docker run -it -p 8888:80 dockerconfiguration -e "ConnectionStrings:DefaultConnection"="testsqlstring" ,它将返回testsqlstring

  5. 因此,如果您只想在运行时覆盖appsettings.json中的值, appsettings.json只需指定类似步骤4

如果您想更改docker容器中的appsettings.json文件,可以按照以下步骤操作

  1. apt-get install vim -y安装vi命令
  2. 运行docker exec -it 43ea835776dd /bin/bash进入容器
  3. 运行ls列出文件并找到appsettings.json
  4. 运行vi appsettings.json修改内容
  5. 运行cat appsettings.json检查内容是否更改
  6. 运行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.ymlenvironments部分中设置它。 它让我:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM