无法使用 docker 容器设置环境变量,错误:环境变量格式不正确,包含空格

问题描述 投票:0回答:1

我尝试运行 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 dockerfile environment-variables docker-image docker-run
1个回答
0
投票

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 ...

但是大多数工具都无法读取您所拥有的格式的文件,只有您正在使用的特定库才能读取。

© www.soinside.com 2019 - 2024. All rights reserved.