我有一个通过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”)