2015-11-05 55 views
6

我有一個要求,在應用程序運行之前,它的某些部分需要讀取環境變量。爲此,我有以下搬運工文件envsubst命令卡在容器中

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行讀取(應該讀)的環境變量$MYENV和替代它。但是當我打開文件app.js時,它是空的。 我檢查了環境變量是否存在於容器中,它是否存在。任何原因,其價值不被讀取和取代? 我也嘗試了相同的命令在容器中,它的工作原理。當我運行圖像時,它不起作用

回答

5

這可能是因爲$MYENV在運行圖像時不可用於envsubst

每個RUN命令都在它自己的shell上運行。

從碼頭工人單證:

RUN(該命令在shell中運行 -/bin/sh的-c - 殼形式)

那麼需要獲得您的個人資料,以及,例如,如果$MYENV環境變量在.bashrc文件可用,您可以修改您的Dockerfile這樣的:

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

我建議THA由於您正在使用節點,因此您使用npm envsub模塊。

這個模塊經過了充分的測試,並且考慮到了docker的開發。

它可以避免當你已經擁有完整的Node arsenal時,依賴其他依賴關係的需要。

envsub被描述爲

envsub經由把手

爲的NodeJS

的NodeJS全球CLI模塊提供的文件級環境變量替換是envsubst我是包的作者。我想你會喜歡它的。

相關問題