这是我们使用阿里云容器服务基于 docker 容器部署 asp.net core 应用遇到的另一个问题 —— 如果将包含敏感信息的应用配置文件 appsettings.Production.json 传递给运行在容器中的 asp.net core 应用。

Docker 针对这样的应用场景已经提供了解决方案 —— Docker Secrets,对应的 docker 命令是 docker secret 。我们就用 docker secrets 解决了这个问题,在这篇随笔中分享一下。

首先在阿里云容器服务中将 appsettings.Production.json 添加到 docker scrects :

进入集群管理的控制台 -> “密钥管理”,点击“创建”按钮添加一个 secret ,将 appsettings.Production.json 中的保存在这里(见下图)。

如果不通过阿里云容器服务控制台,可以直接使用 docker secret 命令添加(前提用 docker 客户端连接到阿里云容器服务中对应的集群):

cat appsettings.Production.json | docker secret create cache-service-appsettings.Production.json -

接着修改编排(compose)文件,启用这个 secret :

secrets:
- cache-service-appsettings.Production.json

有了这个编排,容器启动后,就可以在 /run/secrets 目录中看到这个文件,并且可以查看文件中的配置内容:

root@511090335bb5:/# ls /run/secrets
cache-service-appsettings.Production.json
root@511090335bb5:/# cat /run/secrets/cache-service-appsettings.Production.json

为了让容器中的 asp.net core 应用能够读取到这个文件,我们采用的方法是在容器启动时,将其复制到应用程序的根目录中并重命名为 appsettings.Production.json :

command: bash -c "cp /run/secrets/cache-service-appsettings.Production.json /app/appsettings.Production.json && cd /app && dotnet Cnblogs.Cache.WebApi.dll"

添加了 secret ,修改好 compose ,重新部署应用,运行在容器中的 asp.net core 应用就能成功读取到保存在 docker secrets 中的  appsettings.Production.json 的配置。

搞定!

2017年6月22日更新

后来在实际时使用发现,当容器运行时,无法通过 docker secret rm 命令删除 secret :

Error response from daemon: rpc error: code = 3 desc = secret 'cache-appsettings.Production.json' is in use by the following service: xxx

由于 docker secrets 无法直接更新,只能删除后添加,但删除需要停止容器,这对于生产环境是不能接受的。如果不采用先删除后添加的方式,那只能每次更新时换一个secret名称,但这样编排文件也要跟着进行修改,很麻烦。

后来改用阿里云容器服务的NAS数据卷解决了这个问题,参考阿里云帮助文档:

阿里云容器服务与ASP.NET Core部署:用 docker secrets 保存 appsettings.Production.json的更多相关文章

  1. 品尝阿里云容器服务:初步尝试ASP.NET Core Web API站点的Docker自动化部署

    部署场景是这样的,我们基于 ASP.NET Core 2.0 Preview 1 开发了一个用于管理缓存的 Web API ,想通过阿里云容器服务基于 Docker 部署为内网服务. 在这篇博文中分享 ...

  2. 基于阿里云容器服务用docker容器运行ASP.NET 5示例程序

    小试阿里云容器服务 之后,接下来有一个挡不住的小试冲动--用docker容器运行程序.首先想到的程序是 ASP.NET 5示例程序,于是参考msdn博客中的这篇博文 Running ASP.NET 5 ...

  3. 利用阿里云容器服务打通TensorFlow持续训练链路

    本系列将利用Docker和阿里云容器服务,帮助您上手TensorFlow的机器学习方案 第一篇:打造TensorFlow的实验环境 第二篇:轻松搭建TensorFlow Serving集群 第三篇:打 ...

  4. 阿里云容器服务--配置自定义路由服务应对DDOS攻击

    阿里云容器服务--配置自定义路由服务应对DDOS攻击 摘要: 容器服务中,除了slb之外,自定义路由服务(基于HAProxy)也可以作为DDOS攻击的一道防线,本文阐述了几种方法来应对普通规模的DDO ...

  5. 品尝阿里云容器服务:用nginx镜像创建容器,体验基于域名的路由机制

    在前一篇博文中我们了解了阿里云容器服务的路由机制: 请求 -> 负载均衡80端口 -> 容器主机9080端口 -> acsrouting路由容器80端口 --基于域名--> W ...

  6. 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1

    摘要: 全球开源区块链领域影响最为广泛的Hyperledger Fabric日前宣布了1.1版本的正式发布,带来了一系列丰富的新功能以及在安全性.性能与扩展性等方面的显著提升.阿里云容器服务区块链解决 ...

  7. 在阿里云容器服务上开发基于Docker的Spring Cloud微服务应用

    本文为阿里云容器服务Spring Cloud应用开发系列文章的第一篇. 一.在阿里云容器服务上开发Spring Cloud微服务应用(本文) 二.部署Spring Cloud应用示例 三.服务发现 四 ...

  8. Knative 应用在阿里云容器服务上的最佳实践

    作者|元毅 阿里云智能事业群高级开发工程师 相信通过前面几个章节的内容,大家对 Knative 有了初步的体感,那么在云原生时代如何在云上玩转 Knative?本篇内容就给你带来了 Knative 应 ...

  9. 阿里云容器服务中国最佳,进入 Forrester 报告强劲表现者象限

    近日,全球知名市场调研机构 Forrester 发布首个企业级公共云容器平台报告. 报告显示:阿里云容器服务创造了中国企业最好成绩,与谷歌云位于同一水平线,进入强劲表现者象限. 究其原因,分析师认为: ...

随机推荐

  1. 安装babel遇到的异常

    Error: Requires Babel "^7.0.0-0", but was loaded with "6.26.3". If you are sure ...

  2. 【LeetCode】239. Sliding Window Maximum

    Sliding Window Maximum   Given an array nums, there is a sliding window of size k which is moving fr ...

  3. B+树索引和哈希索引的区别[转]

    导读 在MySQL里常用的索引数据结构有B+树索引和哈希索引两种,我们来看下这两种索引数据结构的区别及其不同的应用建议. 二者区别 备注:先说下,在MySQL文档里,实际上是把B+树索引写成了BTRE ...

  4. MySql按周,按月,按日分组统计数据

    知识关键词:DATE_FORMAT select DATE_FORMAT(create_time,'%Y%u') weeks,count(caseid) count from tc_case grou ...

  5. golang ---tcmalloc浅析

    总体结构 在tcmalloc内存管理的体系之中,一共有三个层次:ThreadCache.CentralCache.PageHeap,如上图所示.分配内存和释放内存的时候都是按从前到后的顺序,在各个层次 ...

  6. Spark 准备篇-基本原理

    本章内容: 待整理 参考文献: <深入理解SPARK:核心思想与源码分析>(第2章) Spark的作业提交及运行流程的异同

  7. 如何取消Visual Studio Browser Link

    VS2013.2015新建MVC网站并浏览后,页面默认自动启用Browser Link功能 解决方法,只需要在web.config中添加配置节点即可 <appSettings> <a ...

  8. Git的使用(一)

    最近在解除git的使用,开始觉得git某些地方还是挺方便的. 1.svn的话管理起来是比较方便,可是断网的话,会用不了 2.git的话,管理一些开源的东西比较方便,并且比较好管理日常写的demo程序, ...

  9. Java多线程系列——线程池原理之 ThreadPoolExecutor

    ThreadPoolExecutor 简介 ThreadPoolExecutor 是线程池类. 通俗的讲,它是一个存放一定数量线程的线程集合.线程池允许多个线程同时运行,同时运行的线程数量就是这个线程 ...

  10. 奇怪的Excel导入问题,OleDbException (0x80004005): 未指定的错误

    windows server 2008 的安全性做的比较好,首先进入系统盘(一般都是C:\),点击工具--文件夹选项--查看,把“使用共享向导(推荐)”的勾去掉,把“隐藏受保护的操作系统文件(推荐)” ...