App*_*per 5 c# docker asp.net-core
我已经关注了这篇文章,但github上的代码无法编译,我认为教程已经过时了。( Configuration = builder.Build();) 抛出错误。那么如何访问从 docker 传递过来的 env 呢?
docker-compose
myproj:
image: mcr.microsoft.com/dotnet/core/sdk:2.2
restart: on-failure
working_dir: /MyProj
command: bash -c "dotnet build MyProj.csproj && dotnet bin/Debug/netcoreapp2.2/MyProj.dll"
ports:
- 5001:5001
- 5000:5000
volumes:
- "./MyProj:/MyProj"
environment:
DATABASE_HOST: database
DATABASE_PASSWORD: Password
Run Code Online (Sandbox Code Playgroud)
启动文件
public Service()
{
Environment.GetEnvironmentVariable("DATABASE_PASSWORD"); // null
}
// This method gets called by the runtime. Use this method to add services to the container.
// For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
public void ConfigureServices(IServiceCollection services)
{
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.Run(async (context) =>
{
context.Response.WriteAsync("Hello World!");
});
}
Run Code Online (Sandbox Code Playgroud)
Ver*_* C. 15
IConfiguration您可以读取默认情况下为您完成的所有值。如果您已在 中使用默认值配置主机Program.cs,那么它将按以下顺序加载配置
例如,你可以上一堂课
public class DatabaseSettings
{
public string Host { get; set; }
public string Password { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后Startup.cs您可以读取这些值并将它们绑定到一个DatabaseSettings对象。
var credentials = Configuration.GetSection("Database").Get<DatabaseSettings>();
注意:您的环境变量必须使用双下划线来分隔键和值部分。
例如,如果您要从文件appsettings.json或appsettings.Development.json文件传递此层次结构JSON对象
"Database": {
"Host": "address",
"Password": "password"
}
Run Code Online (Sandbox Code Playgroud)
也可以像这样展平时表示
"Database:Host":"address",
"Database:Password":"Password"
Run Code Online (Sandbox Code Playgroud)
或者当作为环境变量传递时可以这样做
Database__Host=address
Database__Password=password
Run Code Online (Sandbox Code Playgroud)
请记住,您需要双下划线。
Sou*_*jee 13
在 .NET Core 应用程序中访问环境变量的标准方法是使用静态方法
public static string GetEnvironmentVariable (string variable);
Run Code Online (Sandbox Code Playgroud)
因此,在您的情况下,无论您在 docker run 命令中或通过启动设置文件传递什么,都只需使用此方法。作为获取数据库密码的示例,请使用此
string dbPassword = Environment.GetEnvironmentVariable("DATABASE_PASSWORD");
Run Code Online (Sandbox Code Playgroud)
此外,请务必通过添加以下行来定义 dockerfile 的环境变量部分
ENV DATABASE_PASSWORD some_default_value_or_can_be_empty
Run Code Online (Sandbox Code Playgroud)
小智 7
您可以在构建参数中传递 env 变量。例如
--build-arg ASPNETCORE_ENVIRONMENT=Development
Run Code Online (Sandbox Code Playgroud)
使用以下变量设置值:
ASPNETCORE_ENVIRONMENT
代码:
var environmentName = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
Run Code Online (Sandbox Code Playgroud)
您可以在环境名称的代码中使用上述变量。
| 归档时间: |
|
| 查看次数: |
19053 次 |
| 最近记录: |