将电子邮件 API 密钥传递给容器而不在 app.yml 中硬编码

您好!我将 discourse 的 app.yml 配置文件保存在了一个 git 仓库中(与服务器的其他配置一起)。

很自然地,我希望将 DISCOURSE_SMTP_PASSWORD 排除在 git 仓库之外,因此我想单独传递它。有什么推荐的方法吗?

我尝试过:

使用 docker-composeenv_file: 部分,以及 env:,来尝试传递一个单独的文件:

env_file:
  - path: /var/discourse/containers/creds.env

env:
  LANG: en_US.UTF-8
  # DISCOURSE_DEFAULT_LOCALE: en
  ...


====== creds.env ======
DISCOURSE_SMTP_PASSWORD="..."

但我一直无法让 docker 识别这个 ENV 变量。

我尝试将其传递给 --docker-args
sudo /var/discourse/launcher rebuild app --docker-args DISCOURSE_SMTP_PASSWORD=$DISCOURSE_SMTP_PASSWORD
但这会立即出错:
docker: invalid reference format: repository name must be lowercase.

感谢这款出色的软件,希望你们一切安好 :)))

2 个赞

嘿,欢迎回来!

我认为正确的语法应该是这样的:

./launcher rebuild app --docker-args "-e DISCOURSE_SMTP_PASSWORD=\"password\""

使用 --env-file,这应该也能奏效:

./launcher rebuild app --docker-args "--env-file=/var/discourse/containers/creds.env"
2 个赞

太棒了!

(为了存档:我还得稍微调整了一下引用,像这样:

./launcher rebuild app --docker-args "-e DISCOURSE_SMTP_PASSWORD=$DISCOURSE_SMTP_PASSWORD"

否则我会收到 **ERROR** - 535 Authentication failed 的错误——而且在重建控制台输出的最后一行,你可以看到命令行中多了一对引号。我认为 env_file 变量声明可能也不应该像我最初发帖时那样加上引号。)

非常感谢你的帮助,祝你一天愉快!

2 个赞

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.