.NET6 Program.cs中如何注入.env环境变量(Docker适配场景)
.NET6 用.env文件适配Docker配置的正确玩法
1. 先装依赖包
不想自己写代码解析.env的话,直接用现成的DotNetEnv NuGet包就行,用CLI安装:
dotnet add package DotNetEnv
或者在Visual Studio的NuGet包管理器里搜索该包完成安装。
2. 在Program.cs里加载.env并接入配置
在构建应用主机之前,先把.env里的内容加载到环境变量,再让配置系统读取这些变量:
using DotNetEnv; // 默认加载项目根目录的.env文件,要指定路径的话传参数即可,比如 Env.Load("./config/.env") Env.Load(); var builder = WebApplication.CreateBuilder(args); // 把环境变量加入配置源,环境变量优先级比appsettings.json高,会自动覆盖重复的配置项 builder.Configuration.AddEnvironmentVariables(); // 后续正常添加服务、配置中间件 builder.Services.AddControllers(); // ...其他服务配置代码 var app = builder.Build(); // ...中间件配置代码 app.Run();
3. Docker相关配置
用Dockerfile的情况
要把.env文件复制到容器内,否则容器无法读取:
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base WORKDIR /app EXPOSE 80 FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build WORKDIR /src COPY ["YourProject.csproj", "."] RUN dotnet restore "./YourProject.csproj" COPY . . WORKDIR "/src/." RUN dotnet build "YourProject.csproj" -c Release -o /app/build FROM build AS publish RUN dotnet publish "YourProject.csproj" -c Release -o /app/publish /p:UseAppHost=false FROM base AS final WORKDIR /app COPY --from=publish /app/publish . # 把本地的.env复制到容器工作目录 COPY .env . ENTRYPOINT ["dotnet", "YourProject.dll"]
用Docker Compose的情况
直接在compose文件里指定.env路径更便捷,无需手动复制:
version: '3.8' services: your-app: build: . ports: - "8080:80" env_file: - .env # 填写你的.env文件路径
额外注意点
.env文件别提交到Git,一定要加到.gitignore里:
.env
- 要是不想用第三方库,也可以手动解析.env文件:
var envFilePath = Path.Combine(Directory.GetCurrentDirectory(), ".env"); if (File.Exists(envFilePath)) { foreach (var line in File.ReadAllLines(envFilePath)) { // 跳过注释和空行 if (string.IsNullOrWhiteSpace(line) || line.StartsWith("#")) continue; // 分割键值对,只按第一个=分割,避免值里带=的情况 var keyValue = line.Split('=', 2); if (keyValue.Length != 2) continue; Environment.SetEnvironmentVariable(keyValue[0].Trim(), keyValue[1].Trim()); } } var builder = WebApplication.CreateBuilder(args); builder.Configuration.AddEnvironmentVariables();
内容的提问来源于stack exchange,提问作者DDank
相关产品推荐
相关产品推荐

