.NET 6 Docker容器中为何无法查看环境变量?
问题解答
为什么看不到这个环境变量?
- 这个变量不是以容器级环境变量的方式传入的,所以
printenv、Docker Desktop的容器详情里都找不到它,也不会出现在docker run的-e参数记录里。 - 它是Visual Studio容器工具针对.NET配置绑定特性做的特殊处理,通过临时挂载的.NET Secret文件传递给应用,属于应用进程专属的配置来源,和容器系统级的环境变量不是一回事。
它是如何传入容器的?
- Visual Studio启动容器时,会把
launchsettings.json里environmentVariables中用__分隔的分层命名变量(对应配置类的嵌套结构),生成临时的JSON Secret文件。 - 这个文件会被挂载到容器内的
/root/.microsoft/usersecrets/[专属Secret ID]目录(Linux容器),或者Windows容器对应的用户Secrets目录。 - ASP.NET Core的配置系统默认会加载用户Secrets文件,所以应用能读取到
MYSECRETS__MYDBPASSWORD的值,但这个值并没有被设置为容器的系统环境变量,因此只有应用进程能通过配置系统访问,容器层面的系统命令或工具查不到它。
内容的提问来源于stack exchange,提问作者elshev
相关产品推荐
相关产品推荐

