阿里雲容器服務與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.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數據卷解決了這個問題,參考阿里雲幫助文檔:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM