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

时间:2019-06-05 17:07:26

标签: c# docker asp.net-core

我实现了一个asp.net核心API 2.2。我已经创建了一个docker镜像。我想覆盖appsettings.json文件中的连接字符串。

有什么办法吗?当我使用命令docker container run -e "ConnectionStrings:DefaultConnection={...here goes the connection string}"

启动容器时,尝试通过环境变量进行操作

我的Startup.cs中也有builder.AddEnvironmentVariables();,但appsetting.json中的连接字符串未替换。

我在容器中检查了它,appsetting.json在那儿,但是值没有被替换。

以其他方式如何处理此类案件?谢谢。

2 个答案:

答案 0 :(得分:1)

appsetting.json从未更改,但是根据层次结构,变量值将被覆盖。看一下https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?view=aspnetcore-2.2#conventions上的示例。效果很好。也许只是为了确保您不会因为命令行执行而中断某些操作,您可以尝试通过docker-compose分配环境变量。经验法则是,您用于“键”的模式必须(在__而不是:的帮助下)与json文件中的模式匹配,以便被覆盖。

答案 1 :(得分:0)

对于-e,它将覆盖系统环境,该环境将在您从代码中检索时更改连接字符串,并且不会影响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")检索连接字符串,如

    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中的值,则只需指定类似步骤4

如果您希望更改Docker容器中的appsettings.json文件,可以按照以下步骤

  1. 使用vi安装apt-get install vim -y命令
  2. 运行docker exec -it 43ea835776dd /bin/bash进入容器
  3. 运行ls列出文件并找到appsettings.json
  4. 运行vi appsettings.json修改内容
  5. 运行cat appsettings.json来检查内容是否已更改
  6. 运行exit并访问Home/Index以检查结果。