.Net Core和Docker(管理应用程序设置)

时间:2018-01-09 07:19:11

标签: docker continuous-integration .net-core docker-compose dockerfile

我刚刚开始使用docker。花了很多时间在docker视频和教程上,最后我能够创建我的第一个docker镜像(并推送到docker hub)。我将很快将该图像用于我的开发环境。

问题是:

我的appsettings.json文件中的应用程序配置很少。这些配置对于不同的环境是不同的。当我在开发环境中提取docker镜像时,这些配置需要根据开发环境进行更改。我不知道如何管理这个。有人对此有所了解吗?

很少有用的信息:

  1. 我有.net core 2.0应用程序。
  2. 我正在使用,docker for windows(根据要求)。
  3. 我将在VM或Azure App Service上托管该容器。

3 个答案:

答案 0 :(得分:1)

你已经看过this

使用 ConfigurationBuilder

var configuration = new ConfigurationBuilder()
 .AddJsonFile("appsettings.json")
 .AddJsonFile($"appsettings.{env.EnvironmentName}.json")
 .AddEnvironmentVariables()
 .Build();

答案 1 :(得分:1)

在你的Startup.cs中,如果一切都完好无损,你应该拥有它;

var configuration = new ConfigurationBuilder()
  .AddJsonFile("appsettings.json")
  .AddJsonFile($"appsettings.{env.EnvironmentName}.json")
  .AddEnvironmentVariables()
  .Build();

您有Production以外的2个环境名称。那些是 - Development - Staging

AspNetCore根据环境变量ASPNETCORE_ENVIRONMENT的值了解您想要的环境,该值应为ProductionDevelopmentStaging

您所处的环境非常重要,因为AspNetCore会根据您的环境名称选择正确的设置json文件。我上面分享的代码就是这样做的;

  1. 从appsettings.json加载设置
  2. 查找特定于环境的设置文件。

    • 用于生产 - > appsettings.production.json(注意,这通常不使用)
    • 开发 - > appsettings.development.json
    • 用于分段 - > appsettings.staging.json
  3. 根据特定于环境的设置json file
  4. 覆盖设置值

    所以问题的解决方案是;

    1. 确保您的appsettings.json文件已填入生产值。
    2. 为appsettings.development.json和appsettings.staging.json添加设置文件。对这些文件的内容进行必要的修改。
    3. 当您运行Docker容器时,请根据您要保留的环境设置覆盖环境变量ASPNETCORE_ENVIRONMENT,如上所述。

答案 2 :(得分:1)

当您docker run时,您可以为其提供环境变量列表或包含环境设置的文件。这允许您设置启动容器时需要修改的变量。

使用-e标志:

docker run -it -e ASPNETCORE_ENVIRONMENT=Prod...

使用--env-file标志:

docker run -it --env-file ./Prod.env ...

供参考:https://docs.docker.com/engine/reference/commandline/run/#set-environment-variables--e-env-env-file