【问题标题】:Docker Swarm Secrets + PortainerDocker Swarm Secrets + Portainer
【发布时间】:2020-08-04 08:38:26
【问题描述】:

我在 Docker Swarm + Portainer 上运行我的 Node-Red。 我想定义几个凭证,例如一些用于开发,一些用于测试,一些用于生产,以便我可以创建 3 个容器,每个环境一个,并为每个环境使用相关凭证。 我对正确的选择方式有点困惑——据我所知,我可以使用 Docker Swarm Secrets,但是我不知道如何从 Node-Red 编辑器访问它们;或者我可以在 settings.js 中使用“credentialsSecret”——但我不确定它是否适合多个凭据。

有人可以帮忙吗? 提前致谢!

【问题讨论】:

  • 从问题中不清楚你在这里问的是什么。 credentialsSecret 是加密流使用的实际服务凭证的密钥,而不是将服务凭证传递给 Node-RED 的方法。请edit这个问题提供更多关于您想要实现的目标的详细信息

标签: docker-swarm node-red portainer


【解决方案1】:

假设凭据作为环境变量传递到容器中,那么它们可以包含在节点配置中,如下所示:

任何节点属性都可以通过设置环境变量来设置 其值为${ENV_VAR} 形式的字符串。运行时加载时 流,它将替换该环境变量的值 在将其传递给节点之前。

这仅在替换整个属性时才有效 - 不能使用 只替换部分值。例如,不可能 使用CLIENT-${HOST}

例如如果您有一个名为 MQTT_PASSWORD 的环境变量,其中包含连接到 MQTT 代理时要使用的密码,您可以在 MQTT 代理配置节点的密码字段中输入 ${MQTT_PASSWORD}

这将在 Node-RED 运行时加载流时填充。

您可以在 Node-RED 文档here中阅读更多信息

【讨论】:

  • 您好,感谢您的回复。我的问题不同 - 我没有将凭据设置为环境变量。当我使用 Docker Swarm Secrets 时,凭证不能作为环境变量访问,所以我的问题是如何以这种方式访问​​它们?还是在 settings.js 中使用 credentialSecret 更好?如果是这样,我如何保存多个凭据并访问它们?
  • 如果它们不是环境变量那么你不能
  • 看起来 Docker Swarm 使用 Secrets 将文件挂载到容器中,您必须阅读此内容,然后生成格式正确的有效 flow_cred.json,然后使用 credentialSecret 加密来自settings.js 文件。这是一项艰巨的任务
  • 谢谢,我知道不是。这就是我寻求您帮助的原因:) 我在网上找不到如何操作的指南。有人可以帮忙吗?