编辑:这已解决。答案是,在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服务时,它报告它无法创建有效的连接字符串,这是我在环境变量为null时所期望的。
不幸的是,在谷歌搜索并尝试了docker run命令的各种编辑后,例如带/不带引号和等号的我无法加载它,也无法给我任何问题的迹象,因此,解决此问题的任何帮助将不胜感激。
答案 0 :(得分:0)
要检查是否已加载环境变量,可以使用docker inspect:
docker inspect --format '{{ (index .Config.Env) }}' <container_id>
这应该显示所有环境变量的列表。
在Windows环境中,我不太使用Docker,但是您可能需要转义'\'和空格。另外,在环境变量中使用“-”似乎令人怀疑。
答案 1 :(得分:-2)
经过更多的搜索并实现了上述想法之后,我发现我的问题是以下问题的重复:How to pass through environment variables in docker run through an env file?
那个答案也解决了这个问题。