如何在docker compose命令中将appsettings.json值替换为.env变量以启动ASP.NET Co



我有一个通过Docker部署的C#/ASP.NET Core MVC应用程序。我一直在对appsetting.json文件中的变量进行硬编码,并通过这样的调用访问它们,例如

services.Configure<ApiEndpoints>(Configuration.GetSection("ApiEndpoints"));

在我的CCD_ 2中。

但最近我开始添加用于部署到.env文件中的变量,并像这样部署docker-compose --env-file .env up。但是我无法访问.NET应用程序中.env文件中的变量。

例如,我尝试了这个

Console.WriteLine(Configuration.GetSection("APPSETTINGS_DB_STR"));

Startup.cs中,在.env文件中我添加了这个变量APPSETTINGS_DB_STR=isThisLoggingCorrectly,它记录为

amaranth_main               | Microsoft.Extensions.Configuration.ConfigurationSection

在我的控制台中。。。那么,如何让asp.net访问docker.env变量呢?

这是我的docker-compose.yml

version: '3.8'
volumes:
data:
services:
postgresql_MENTIONvlt_bg:
image: postgres
# explicit container name
container_name: postgresql_vlt_bg
environment:
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_DB=${POSTGRES_DB}
ports:
- 5432:5432
volumes:
- data:/var/lib/postgresql_vlt_bg
amaranth_main:
container_name: amaranth_main
links:
- postgresql_MENTIONvlt_bg
depends_on:
- postgresql_MENTIONvlt_bg
build:
context: .
dockerfile: Dockerfile
ports:
- 8000:5000
- 8001:5001
environment:
- ASPNETCORE_ENVIRONMENT=Release
- ASPNETCORE_Kestrel__Certificates__Default__Password=${Kestrel_Cert_Password}
- ASPNETCORE_Kestrel__Certificates__Default__Path=${Kestrel_Cert_Rel_Path}
- APPSETTINGS_DB_STR=${APPSETTINGS_DB_STR}
volumes:
- ${Kestrel_Cert_Abs_Path}:/https:ro

p.S.CCD_ 10和CCD_。

修复方法是首先将APPSETTINGS_DB_STR转换为APPSETTINGS__DB__STR。然后,我不得不访问我的c#应用程序代码中的变量。Environment.GetEnvironmentVariable(“APPSETTINGS__DB__STR”)

最新更新