【问题标题】:How can I provide application config to my .NET Core Web API services running in docker containers?如何为在 docker 容器中运行的 .NET Core Web API 服务提供应用程序配置?
【发布时间】:2017-07-01 01:13:42
【问题描述】:

我正在使用 Docker 部署我的 ASP.NET Core Web API 微服务,并且正在研究将配置注入每个容器的选项。在应用程序根目录中使用 appsettings.json 文件的标准方法并不理想,因为据我所知,这意味着将文件构建到我的 docker 镜像中,这将限制镜像可以在哪个环境中运行。

我想构建一次映像,可以在运行时为其提供配置并通过开发、测试 UAT 并进入生产,而无需为每个环境创建映像。

选项似乎是:

  1. 通过环境变量提供配置。似乎有点乏味。
  2. 以某种方式将容器中的路径映射到主机服务器上 appsettings.json 所在的标准位置,并让服务获取它(如何?)
  3. 是否可以在 docker run 命令行上提供值?

有人有这方面的经验吗?您能否提供代码示例/说明,特别是关于目前最好的选项 2)?

【问题讨论】:

    标签: docker configuration asp.net-core .net-core dockerfile


    【解决方案1】:

    可以在 docker 镜像/容器中创建数据卷。并且还将主机目录挂载到容器中。然后可以在容器内访问主机目录。

    添加数据量

    您可以使用带有 docker create 和 docker run 命令的 -v 标志将数据卷添加到容器中。

    $ docker run -d -P --name web -v /webapp training/webapp python app.py
    

    这将在 /webapp 的容器内创建一个新卷。

    将主机目录挂载为数据卷

    除了使用 -v 标志创建卷之外,您还可以将 Docker 引擎主机中的目录挂载到容器中。

    $ docker run -d -P --name web -v /src/webapp:/webapp training/webapp python app.py
    

    此命令将主机目录 /src/webapp 挂载到位于 /webapp 的容器中。

    参考Docker Data Volumes

    【讨论】:

    • 感谢您的回答,我不得不在您的答案和另一个答案之间做出选择,两者都是正确的,恐怕我选择了另一个答案,因为这就是我现在使用的。在我看来,注入环境变量似乎是“最佳实践”,并且使用 Kubernetes 之类的工具可以更轻松地部署和管理容器。但是再次感谢,我确实发现您的回答很有用并已投票。
    【解决方案2】:

    我们现在正在使用其他打包系统(不是 docker 本身),但仍然有同样的问题 - 包可以部署在任何环境中。

    所以,我们现在的做法是:

    1. 使用外部配置管理系统来保存和管理每个环境的配置
    2. 将基本环境变量注入到我们的包中以保存配置管理系统连接详细信息

    这样,我们不仅允许包在几乎任何“已知”环境中运行,而且还允许运行时配置管理。

    在运行docker时,可以使用environment variable options的运行命令:

    $ docker run -e "deep=purple" ...

    【讨论】:

    • 谢谢。您使用的是什么外部配置系统以及如何设置和注入环境变量?您能否举一个docker run 命令行和设置配置的任何相关命令的示例?
    • 我们在我们定制的基于 etcd 的配置系统上运行(简化 - 带有键值的 api)。我们正在设置环境。构建包时的变量(我们不使用 docker),但对于 docker,您可以指定 env。运行命令中的变量 - 更新答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-21
    • 1970-01-01
    • 2015-11-09
    • 1970-01-01
    • 1970-01-01
    • 2019-12-12
    相关资源
    最近更新 更多