【发布时间】:2021-09-30 23:57:27
【问题描述】:
我正在尝试对 ASP.NET Core 5 Web API 项目进行 docker 化,因此我将把所有配置从 appSettings.json 转移到 docker-compose 环境部分。然后从控制器的环境部分读取它们。这个应该怎么做?
我曾尝试在控制器中使用IConfiguration 和Environment,但我刚刚得到Null。
我的Program.cs 是:
namespace Order.Api
{
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); });
}
}
StartUp.cs 是:
namespace Order.Api
{
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<OrderContext>(options =>
options.UseSqlServer(Configuration.GetValue<string>("ConnectionString")));
// options.UseSqlServer(Configuration.GetConnectionString("ConnectionString")));
services.AddControllers();
services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo {Title = "Order.Api", Version = "v1"}); });
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseSwagger();
app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "Order.Api v1"));
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints => { endpoints.MapControllers(); });
}
}
}
docker-compose.override 是:
version: '3.4'
services:
Order.Api :
environment:
- ASPNETCORE_ENVIRONMENT=Development
- ASPNETCORE_URLS=http://0.0.0.0:80
- ConnectionString=${ESHOP_AZURE_ORDERING_DB:-Server=sqldata;Database=Order;User Id=sa;Password=Pass@word}
- MyConfig=Active
ports:
- "5001:80"
sqldata :
environment:
- SA_PASSWORD=Pass@word
- ACCEPT_EULA=Y
ports:
- "5433:1433"
volumes:
- order-sqldata:/var/opt/mssql
volumes:
order-sqldata:
external: false
【问题讨论】:
-
ASP.NET自动从 env vars 读取配置,您只需为其提供正确的名称,请提供更多问题的详细信息,例如您的docker-compose(或 docker 命令)和appsettings.json -
@ExplodingKitten 我已经添加了 docker-compose.override 文件并准备在控制器中读取 ConnectionString 或 MyConfig
标签: asp.net docker asp.net-core docker-compose environment-variables