我尝试运行 docker 容器并从 .env 文件加载环境变量,该文件与项目的其余部分位于同一根目录中。对于上下文,我的 .env 文件看起来像这样:
SERVICE_KEY = `{
"type": "anything",
"project_id": "anything",
"private_key_id": "anything",
"private_key": "anything",
"client_email": "anything",
"client_id": "anything",
"auth_uri": "anything",
"token_uri": "anything",
"auth_provider_x509_cert_url": "anything",
"client_x509_cert_url": "anything"
}`
它是一个 JSON 字符串,带有反引号 `` ,周围有空格以允许解析。 它是 NodeJs 应用程序的一部分,我使用 dotenv 包来查找和初始化环境变量。该应用程序在我的机器上运行良好
当我运行这样的命令时:
$ docker run -p 3000:3000 -d --env-file ./.env image-name
我收到错误:docker: poorly formatted environment: variable '"project_id": "my-image",' contains whitespaces.
我知道这里也有人问过类似的问题,但这些解决方案都没有帮助,我想知道是否有人可以指出我正确的方向。
docker run --env-file
格式
... 文件应使用语法
(将变量设置为给定值)[...] 和<variable>=value
进行注释。以#
开头的行被视为行注释并被忽略....#
也就是说,它接受一行中的一个变量设置,并且不提供多行变量。 Compose 的格式略有不同,但又
每一行代表一个键值对。
并且没有提供多行变量或反引号作为任何类型的引用。
如果该值是可解析的 JSON,则只需删除所有内部空格即可。这编辑起来有点困难,但它可以使用标准工具。
SERVICE_KEY={"type": "anything", "project_id": "anything", ...}
还有其他可能的方法,例如从文件中读取环境变量
SERVICE_KEY=$(cat service-key.json) docker run -e SERVICE_KEY ...
但是大多数工具都无法读取您所拥有的格式的文件,只有您正在使用的特定库才能读取。