asp.net core override connection strings via ENV variables
appsetting.json never gets changed, however based on the hierarchy, variables values get overridden. Take a look at the examples at https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?view=aspnetcore-2.2#conventions . It works pretty well. Perhaps just to be sure that you didn't break something because of command line execution, you can try to assign environment variables via docker-compose. The rule of thumb is that the pattern that you use for the "key" must match (with the help of __
instead of :
)what you have in the json file, so that it gets overridden.
For -e
, it will override the system environment which will change the connectionstring when you retrive from code, it will not affect the content in appsettings.json
.
For example
Assume you have a
appsettings.json
like{ "ConnectionStrings": { "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=aspnet-TestDockerConfiguration-416C6FD2-3531-42D6-9EDE-18AC45901208;Trusted_Connection=True;MultipleActiveResultSets=true" }, "Logging": { "LogLevel": { "Default": "Warning" } }, "AllowedHosts": "*" }
Retrive the connectionstring by
_configuration.GetConnectionString("DefaultConnection")
likepublic class HomeController : Controller { private readonly IConfiguration _configuration; public HomeController(IConfiguration configuration) { _configuration = configuration; } public IActionResult Index() { return Ok(_configuration.GetConnectionString("DefaultConnection")); //return View(); } }
For
docker run -it -p 8888:80 dockerconfiguration
, it will return"Server=(localdb)\\mssqllocaldb;Database=aspnet-TestDockerConfiguration-416C6FD2-3531-42D6-9EDE-18AC45901208;Trusted_Connection=True;MultipleActiveResultSets=true"
for Index ActionFor
docker run -it -p 8888:80 dockerconfiguration -e "ConnectionStrings:DefaultConnection"="testsqlstring"
, it will returntestsqlstring
So, if you only want to override the value in
appsettings.json
during runtime, you just need to specify like Step 4
If you prefer change the appsettings.json file in docker container, you could follow steps below
- Install
vi
command withapt-get install vim -y
- Run
docker exec -it 43ea835776dd /bin/bash
to go into container - Run
ls
to list files and find theappsettings.json
- Run
vi appsettings.json
to modify the content - Run
cat appsettings.json
to check the content whether it is changed - Run
exit
and access theHome/Index
to check the result.