.net core在Docker->Linux及Window平台環境變量的獲取的兼容


如果說關於在Windows系統下,想要獲取指定的環境變量的內容的話,這個在網上就能找到很多相關的內容。

獲取計算機的環境變量

Environment.GetEnvironmentVariable("name",EnvironmentVariableTarget.Machine)

獲取用戶的環境變量

Environment.GetEnvironmentVariable("name",EnvironmentVariableTarget.User)

 

但是跨平台之后,在linux中,就不是那么一回事了。

針對 EnvironmentVariableTarget 枚舉按下 F12 可以看到如下內容。

 

 這兩種方式都是針對windows平台的方法,不適用於 Mac 及 Linux環境。

所以目前只剩下一種方式,就是 EnvironmentVariableTarget  的枚舉值 Process。

接下來就是具體如何實現,既能在windows系統讀取到想要的環境變量,也能在docker容器下的Linux系統中讀取到。

 

首先,修改代碼,加入一行判斷代碼,判斷當前系統環境是windows還是其他。

Environment.GetEnvironmentVariable("MysqlDb",RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? EnvironmentVariableTarget.Machine : EnvironmentVariableTarget.Process)

現在這樣,就能保證windows系統平台下,使用 “machine” 的途徑,而其他系統平台,則使用 “process”的途徑

 

但是關於 process,從整個進程中關聯到的環境變量中查找值,又還是有所限制。

Mac 與 Linux 系統里不支持計算機與用戶環境變量獲取,只能從啟動該dotnet進程的父進程繼承的或在dotnet進程本身范圍內定義的所有環境變量的名稱和值。一旦dotnet進程結束,這些后面的環境變量將不復存在。 

而如果想環境變量,保證是在同一個進程中被創建,同時也是被我們所讀取的話,目前可行的方法是 從 Dockerfile 下手。

 

修改Dockerfile

#設置 MySQL 連接字符串
ENV MysqlDb="Data Source=xxx.xxx.xxx.xxx;Database=test;User ID=root;Password=123456;pooling=true;port=3306;sslMode=None;CharSet=utf8;"

在dockerfile中寫好腳本,在容器中創建我們要的環境變量。

這個時候,我們的.net core應用再去從進程中獲取環境變量,就能讀取到我們想要的值了。

 


免責聲明!

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



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