.net core 容器内怎么检测我是跑在容器内,唯一id得获取等

113 阅读1分钟

在很多天之前,我一直被容器的唯一性所困扰,比如雪花算法需要一个机器号,但是部署在不同容器内的相同服务,怎么获取一个唯一号呢?难道我们每次都给容器赋予不同的环境变量吗?这对于运维来说,感觉太麻烦了吧。
而怎么检测我是部署在容器,或者部署在windows上呢,感觉困难重重?

环境变量

.net core 很好的支持获取环境变量,直接利用System.Environment,就可以获取很多信息,当然在asp.net core下有IHostingEnvironment 可注入的服务支持,利用起来更是爽利无比。不管是docker,亦或者是直接部署在supervisor下的监控控制台,都可以非常方便的设置环境变量,这里仅仅拿docker举例说明。

在Dockerfile中可以使用ENV命令直接指定环境变量,格式如下:

ENV key value
ENV key1=value1 key2=value2

#举个例子吧
ENV ASPNETCORE_ENVIRONMENT Test

ENV VERSION=1.0 DEBUG=on \
	    NAME="Happy Feet"

运行时也可以设定环境变量

docker run --env VARIABLE=VALUE image:tag