envsubst命令卡在容器中

我有一个要求,应用程序运行之前,它的一部分需要读取环境variables。 为此,我有以下的docker文件

FROM nodesource/jessie:0.12.7 # install gettext for envsubst RUN apt-get update RUN apt-get install -y gettext-base # cache package.json and node_modules to speed up builds ADD package.json package.json RUN npm install # Add source files ADD src src # Substiture value for backend endpoint env var RUN envsubst < src/js/envapp.js > src/js/app.js ADD node_modules node_modules EXPOSE 8000 CMD ["npm","start"] 

上面的envsubst行读取(应读取)envvariables$MYENV并将其replace。 但是当我打开文件app.js时,它是空的。 我检查了环境variables是否存在于容器中,并且确实存在。 任何原因,它的价值不被读取和取代? 我也试过在容器中的相同的命令,它的工作原理。 这只在我运行图像时不起作用

这可能是因为运行映像时$MYENV不可用于envsubst

每个RUN命令都在它自己的shell上运行。

从Docker文档:

RUN(命令运行在shell – / bin / sh -c – shellforms中)

您还需要获取您的configuration文件,例如,如果$MYENV环境variables在.bashrc文件中可用,则可以像这样修改Dockerfile:

 RUN source ~/.bashrc && envsubst < src/js/envapp.js > src/js/app.js 

我build议,因为你正在使用Node,所以你使用npm的envsub模块。

这个模块经过了充分的testing,并且考虑到了docker的开发。

当您已经拥有完整的Node Arsenal时,它避免了依赖其他依赖关系的需要。

envsub被描述为

envsub是NodeJS的envsubst

NodeJS全局CLI模块通过把手提供文件级环境variablesreplace

我是这个软件包的作者。 我想你会喜欢它的。