![](/img/trans.png)
[英]ASP.NET Core Web App appsettings.json values replaced by random strings in docker container
[英]How do I replace appsettings.json values with .env variable in docker-compose command to launch an ASP.NET Core MVC app?
我有一個通過 Docker 部署的 C# / ASP.NET 核心 MVC 應用程序。 我一直在appsetting.json
文件中對變量進行硬編碼,並通過這樣的調用訪問它們
services.Configure<ApiEndpoints>(Configuration.GetSection("ApiEndpoints"));
在我的Startup.cs
中。
但最近我開始添加用於部署到.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
PS POSTGRES_USER, POSTGRES_PASSWORD,
和POSTGRES_DB
正在通過就好了。
解決方法是首先將APPSETTINGS_DB_STR
變成APPSETTINGS__DB__STR
。 然后我必須在我的 c# 應用程序代碼中訪問這樣的變量。 Environment.GetEnvironmentVariable(“APPSETTINGS__DB__STR”)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.