Docker 和 PM2:带环境变量的基于字符串的 CMD
Docker & PM2: String based CMD with environment variables
我目前在 Docker 中使用 CMD
的 shell 形式来启动我的节点应用程序:
CMD /usr/src/app/node_modules/.bin/trifid --config $TRIFID_CONFIG
env-var TRIFID_CONFIG
在 Dockerfile
中设置为默认值:
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 似乎得到了正确的评估。
我目前在 Docker 中使用 CMD
的 shell 形式来启动我的节点应用程序:
CMD /usr/src/app/node_modules/.bin/trifid --config $TRIFID_CONFIG
env-var TRIFID_CONFIG
在 Dockerfile
中设置为默认值:
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 似乎得到了正确的评估。