我已经实现了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在那里,但是值没有被替换。
有没有其他方法如何处理这样的情况?Thx。
4条答案
按热度按时间i2byvkas1#
对于
-e
,它将覆盖系统环境,当您从代码中检索时,系统环境将更改connectionstring,它不会影响appsettings.json
中的内容。比如说
1.假设您有一个
appsettings.json
,如1.通过
_configuration.GetConnectionString("DefaultConnection")
类似于1.对于
docker run -it -p 8888:80 dockerconfiguration
,它将为索引操作返回"Server=(localdb)\\mssqllocaldb;Database=aspnet-TestDockerConfiguration-416C6FD2-3531-42D6-9EDE-18AC45901208;Trusted_Connection=True;MultipleActiveResultSets=true"
1.对于
docker run -it -p 8888:80 dockerconfiguration -e "ConnectionStrings:DefaultConnection"="testsqlstring"
,它将返回testsqlstring
1.因此,如果只想在运行时覆盖
appsettings.json
中的值,只需像步骤4那样指定如果您更喜欢在Docker容器中更改appsettings.json文件,可以按照以下步骤操作
1.使用
apt-get install vim -y
安装vi
命令1.运行
docker exec -it 43ea835776dd /bin/bash
以进入容器1.运行
ls
列出文件并查找appsettings.json
1.运行
vi appsettings.json
以修改内容1.运行
cat appsettings.json
,检查内容是否发生变化1.运行
exit
并访问Home/Index
以检查结果。wqsoz72f2#
json永远不会被更改,但是基于层次结构,变量值会被覆盖。看看www.example.com上的例子https://learn.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?view=aspnetcore-2.2#conventions。它运行得很好。也许只是为了确保您没有因为命令行执行而破坏某些东西,您可以尝试通过docker-compose来分配环境变量。(在
__
而不是:
的帮助下)您在json文件中的内容,以便覆盖它。gmxoilav3#
尝试在ConnectionStrings部分不加引号的情况下运行,它工作正常(在PowerShell控制台上)。
$key
变量包含连接字符串jmo0nnb34#
如果您使用
docker-compose
除了在
.env
中指定变量之外,不要忘记在docker-compose.yml
的environments
部分中设置它。