首页 > 解决方案 > .env 文件变量在运行期间不存在:如何检查是否已加载?

问题描述

编辑:这已经解决了。答案是在 Docker 运行命令中,选项必须出现在镜像名称之前;因此,只需将 --env-file settings.env 移动到图像名称之前即可立即解决此问题。

我正在尝试在 Windows 10 上运行的 Linux Docker 容器中运行 C# asp.net 核心 Web 服务。

在调试期间,我能够加载 settings.env 文件,但在运行容器时似乎无法加载它。

settings.env 文件包含以下内容:

#MerConnection data
Server-James=172.25.134.49,1433
Database-James=Store
DBUser-James=user
DBPassword-James=password
ConnectionString-James=

我运行容器的命令如下:

docker run -p 40012:80 apilive:latest --env-file 'C:\Applications\VB2017Apps\Mer .net\Mer\settings.env' -Encoding ascii

我这样称呼环境变量:

        if (Environment.GetEnvironmentVariable("ConnectionString-" + tenantId) == "")
        {
            string server = Environment.GetEnvironmentVariable("Server-" + tenantId);
            string db = Environment.GetEnvironmentVariable("Database-" + tenantId);
            string user = Environment.GetEnvironmentVariable("DBUser-" + tenantId);
            string password = Environment.GetEnvironmentVariable("DBPassword-" + tenantId);

            Environment.SetEnvironmentVariable("ConnectionString-" + tenantId, "Server=" + server + ";Database=" + db + ";User Id=" + user + ";Password=" + password + ";MultipleActiveResultSets=true");
        }


        return Environment.GetEnvironmentVariable("ConnectionString-" + tenantId);

我相信它没有加载,因为在调用 web 服务时它报告它无法创建有效的连接字符串,如果环境变量为空,这是我所期望的。

不幸的是,在谷歌搜索并尝试对 docker run 命令进行各种编辑后,例如带/不带引号和等号等,我无法加载它,也无法给我任何问题的指示,所以任何解决此问题的帮助将不胜感激。

标签: dockerenvironment-variables

解决方案


要检查您的环境变量是否已加载,您可以使用 docker inspect:

docker inspect --format '{{ (index .Config.Env) }}' <container_id>

这应该打印所有环境变量的列表。

我在 Windows 环境中不太使用 Docker,但您可能需要转义您的 '\' 和空格。此外,在环境变量中使用“-”似乎值得怀疑。


推荐阅读