-- .net core的一种兼容Docker,k8s,Linux及Window的获取环境变量的方式(系统级,进程级别等)
【官网】:无
应用场景
很多时候设计跨平台时,如何读取和设置环境变量都是一个问题,本文正好分享这块内容。基础资源
无
使用须知
需要在不同环境下进行相关的验证. 不能在开发环境觉得可以就不管生产环境了。
配置步骤
A)不同平台的获取环境变量的方式.
A1)windows上获取环境变量的语句。
[方案1:获取系统环境变量]
Environment.GetEnvironmentVariable("name",EnvironmentVariableTarget.Machine)
Environment.GetEnvironmentVariable("name",EnvironmentVariableTarget.User)
A2)一种跨平台,兼容windows,linux,max,docker的获取环境变量的方式。
var env=Environment.GetEnvironmentVariable("Env",RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? EnvironmentVariableTarget.Machine : EnvironmentVariableTarget.Process);
A3)startup.cs中的IWebHostEnvironment env( env.IsDevelopment(),env.EnviromentName)的作用。
上述环境变量严格意义来说对应了: Appseting.Development.json,Appseting.Production.json
B)不同平台下设置环境变量的方式.
B1)windows平台上.
这点不用说了,打开: 【我的电脑】->【属性】->【高级系统设置】->【高级】->【环境变量】即可设置.
B2)linux平台.
使用export命令直接修改PATH的值,配置MySQL进入环境变量的方法:
export PATH=/home/uusama/mysql/bin:$PATH # 或者把PATH放在前面 export PATH=$PATH:/home/uusama/mysql/bin
注意事项:
- 生效时间:立即生效
- 生效期限:当前终端有效,窗口关闭后无效
- 生效范围:仅对当前用户有效
- 配置的环境变量中不要忘了加上原来的配置,即$PATH部分,避免覆盖原来配置
B3)直接用docker启动的项目.
使用docker run --env VARIABLE=VALUE image:tag直接添加变量
示例:
root@ubuntu:/home/vickey/test_build# docker run --rm -it --env TEST=2 ubuntu:latest root@2bbe75e5d8c7:/# env |grep "TEST" TEST=2
B4)k8s场景(不能用docker run命令启动的项目).
使用dockerfile的ARG和ENV添加变量:
ARG只在构建docker镜像时有效(dockerfile的RUN指令等),在镜像创建了并用该镜像启动容器后则无效(后面有例子验证)。但可以配合ENV指令使用使其在创建后的容器也可以生效。
ARG buildtime_variable=default_value # if not set default_value buildtime_variable would be set ‘‘ ENV env_var_name=$buildtime_variable
在构建映像时,可以使用--build-arg buildtime_variable=other_value覆盖dockerfile里的变量值default_value
$ docker build --build-arg buildtime_variable=other_value --tag image:tag
常见问题
快速入门
无