【问题标题】:.Net Core and Docker (Manage Application Settings).Net Core 和 Docker(管理应用程序设置)
【发布时间】:2018-01-09 07:19:11
【问题描述】:

我刚开始使用 docker。通过在 docker 视频和教程上花费大量时间,我终于能够创建我的第一个 docker 映像(并推送到 docker hub)。我很快就会将该图像用于我的开发环境。

问题是:

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

一些有用的信息:

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

【问题讨论】:

  • 你能说得更具体点吗?您是否将 docker 图像拉入您的开发环境,因为您将使用您的应用程序扩展它们或什么?如果您要创建新图像,您可以通过这种方式添加特定于环境的内容...
  • 是的,我要把那个 docker 镜像拉到我的开发环境中。
  • 请尝试澄清您的问题。 “当我在开发环境中拉取 docker 映像时,这些配置需要根据开发环境进行更改”,我对此一无所知
  • @Hasan:我在 docker hub 上有一个 docker 镜像,里面有我的本地配置。现在,我想将相同的 docker 映像部署到我的 dev、stag 和 prod 环境中。显然,对于这些环境,我的 connectionString 和其他值会有所不同。当我在这些环境中拉取 docker 映像时,如何更改这些值。我应该为不同的环境创建不同的图像吗?即 Dev 一个,Stag 一个

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


【解决方案1】:

你已经看过this

使用 ConfigurationBuilder

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

【讨论】:

  • 是的,我已经配置了这个。但问题是;在不同的环境中使用相同的 docker hub 镜像时,我们没有定义当前环境的选项。你找到我了吗?
  • 是的。您可以使用dotnet build (docs.microsoft.com/en-us/dotnet/core/tools/…) 的配置开关,或者您可以在调用dotnet(在入口点节中)前加上ASPNETCORE_ENVIRONMENT=ProductionASPNETCORE_ENVIRONMENT=Staging(分别用于生产和登台)跨度>
  • @JamieTaylor 将有单一构建作为 docker 镜像。
  • 一个构建多个环境?
【解决方案2】:

在你的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 文件覆盖设置值

所以你的问题的解决方案是;

  1. 确保您的 appsettings.json 文件已填充生产值。
  2. 为 appsettings.development.json 和 appsettings.staging.json 添加设置文件。对这些文件的内容进行必要的修改。

当您运行 Docker 容器时,请根据您希望保留的环境设置覆盖环境变量 ASPNETCORE_ENVIRONMENT,如上所述。

【讨论】:

  • 我知道上面的东西。但问题是,当您在单个 docker 映像下运行时。如何覆盖设置值?
【解决方案3】:

当您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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-13
    • 1970-01-01
    • 1970-01-01
    • 2021-11-04
    • 2017-03-01
    • 1970-01-01
    相关资源
    最近更新 更多