【问题标题】:Why is Docker removing the double quotes from my environment variable?为什么 Docker 从我的环境变量中删除双引号?
【发布时间】:2021-06-08 05:56:29
【问题描述】:

当我构建我的 docker 镜像并运行容器时,双引号会从我的环境变量中删除。

这是我的 Dockerfile:

FROM node:15

WORKDIR /usr/src/app

RUN mkdir -p /usr/src/app/logs

COPY package*.json ./

RUN npm install

COPY . .

# Timezone
ENV TZ America/Chicago

### Edges
ENV MONITORING_EDGE_THRESHOLDS={"onlineStatus":"OFFLINE","processors":{"critical":90,"degraded":75},"memory":{"critical":90,"degraded":75},"disks":{"critical":90,"degraded":75},"subsystems":{"critical":200,"degraded":100},"networks":{"critical":2,"degraded":1}}

CMD [ "node", "server.js" ]

Docker 检查显示引号被删除:

MONITORING_EDGE_THRESHOLDS

{onlineStatus:OFFLINE,processors:{critical:90,degraded:75},memory:{critical:90,degraded:75},disks:{critical:90,degraded:75},subsystems:{critical:200,degraded:100},networks:{critical:2,degraded:1}}

随后,我的 node.js 应用程序失败了,因为我需要使用 JSON.parse() 将此值转换为 JSON 对象,但由于 Docker 删除了引号,它不是有效的 JSON 对象,因此无法正常工作。

【问题讨论】:

  • 大概是因为环境变量可以被引用,但是你必须转义里面的任何引号,所以MONITORING_EDGE_THRESHOLDS="{\"onlineStatus\":\"OFFLINE\",\"........" 但是为什么这是一个环境变量而不是像monitoring-prod.config.json 这样你刚刚读入的文件?
  • 没有“JSON 对象”这样的东西。它要么是 JSON,即 text,要么是一个对象。解析 JSON 会创建一个对象。尝试不要在其上调用JSON.parse(),而是直接访问属性。
  • @Chris G,返回未定义。它是一个字符串,直到它被转换为带有JSON.parse(string) 的对象,当使用 .env 在 localhost 上运行时,它可以正常工作。
  • @Mike'Pomax'Kamermans,使用单引号不会转义吗?
  • docs 说:The value will be interpreted for other environment variables, so quote characters will be removed if they are not escaped. 我猜只是将原始 JSON 中的所有 " 替换为 \" 并将其用作值,不需要外部分隔符。

标签: javascript node.js docker


【解决方案1】:

试试这个

ENV MONITORING_EDGE_THRESHOLDS='{"onlineStatus":"OFFLINE","processors":{"critical":90,"degraded":75},"memory":{"critical":90,"degraded":75},"disks":{"critical":90,"degraded":75},"subsystems":{"critical":200,"degraded":100},"networks":{"critical":2,"degraded":1}}'

【讨论】:

  • 当尝试使用它时,带有 JSON.parse => Unexpected token ',没有 JSON.parse: TypeError: Cannot read property 'critical' of undefined
猜你喜欢
  • 2019-08-12
  • 2010-09-23
  • 1970-01-01
  • 2018-10-03
  • 2021-05-29
  • 2022-01-27
  • 1970-01-01
  • 2010-12-30
  • 2015-06-25
相关资源
最近更新 更多