阿里云容器服务与ASP.NET Core部署:用 docker secrets 保存 appsettings.Production.json
這是我們使用阿里云容器服務基于 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.jsonroot@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數據卷解決了這個問題,參考阿里云幫助文檔:
- 創建 NAS 數據卷
- 使用第三方數據卷
總結
以上是生活随笔為你收集整理的阿里云容器服务与ASP.NET Core部署:用 docker secrets 保存 appsettings.Production.json的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 51CTO学院四周年-成长之路
- 下一篇: MIT 学生挑战新泽西索取挖矿程序源代码