Docker 和 PM2:带环境变量的基于字符串的 CMD

Docker & PM2: String based CMD with environment variables

我目前在 Docker 中使用 CMDshell 形式来启动我的节点应用程序:

CMD /usr/src/app/node_modules/.bin/trifid --config $TRIFID_CONFIG

env-var TRIFID_CONFIGDockerfile 中设置为默认值:

ENV TRIFID_CONFIG config.customer.json

例如,这使得为开发环境传递另一个配置文件变得容易。

现在我尝试将其切换为 PM2 以用于生产。然而,看起来所有 PM2 样本都使用 "exec" 形式,据我所知,这种形式不会评估 ENV-vars。我用 PM2 尝试了 shell-form:

CMD pm2-docker /usr/src/app/node_modules/trifid/server.js --config $TRIFID_CONFIG

但看起来变量不是这样计算的,它在执行时会失败返回到默认值。

在 Docker 图像中使用 PM2 处理此问题的正确方法是什么?

我在 Github 上进行了讨论,同时弄明白了:

CMD pm2-docker /usr/src/app/node_modules/.bin/trifid -- --config $TRIFID_CONFIG

所以诀窍是在命令后使用 -- ,其余的将作为参数传递。如果我使用 shell 形式 env-vars 似乎得到了正确的评估。