docker - .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 命令进行各种编辑后,例如带/不带引号和等号等,我无法加载它,也无法给我任何问题的指示,所以任何解决此问题的帮助将不胜感激。
解决方案
要检查您的环境变量是否已加载,您可以使用 docker inspect:
docker inspect --format '{{ (index .Config.Env) }}' <container_id>
这应该打印所有环境变量的列表。
我在 Windows 环境中不太使用 Docker,但您可能需要转义您的 '\' 和空格。此外,在环境变量中使用“-”似乎值得怀疑。
推荐阅读
- python - ttkwidgets 日历按钮语言
- jmeter - 如何在 Jmeter 中使用的时髦脚本中迭代这些记录直到最后一个记录?
- javascript - _async 处的“UnhandledPromiseRejectionWarning:错误:非法参数:未定义,字符串”
- c++ - 在 Windows 10 上将 QtSerialPort 添加到 QtCreator
- python - 设置 Phemex API 交易
- python - 更新 Spyder 5.0.0 和 Anaconda 导航器后使用 Tensorflow 时出错
- github - 如何避免在 GitHub 中重复与同一问题相关的工作?
- angular - Zoomline:zone-evergreen.js:659 未处理的承诺拒绝:ChunkLoadError:加载块 6 失败。在角 11
- spring-boot - 我的@SpringBootTest 类中的自动装配存储库为空
- express - 如何使用 Mern 堆栈监听状态“待定”