2017-09-15 120 views
2

我需要設置一個環境變量CLASSPATH。在該變量,我需要設置一個命令的結果:Docker從命令或文件設置環境變量

hadoop classpath --glob 

這將返回一噸的Java庫,他們都需要進行設定成CLASSPATH變量。最大的問題是我只能在Docker構建完成後才能運行此命令,這意味着我必須在ENTRYPOINT中執行此操作。但我不能讓它工作。我嘗試了不同的方法:

ENTRYPOINT ["sh", "-c", "export CLASSPATH=$(hadoop classpath --glob) ...." 
ENTRYPOINT ["sh", "-c", "set CLASSPATH=$(hadoop classpath --glob) ...." 
ENTRYPOINT ["sh", "-c", "CLASSPATH=$(hadoop classpath --glob) ...." 
ENTRYPOINT ["sh", "-c", "/bin/bash && export CLASSPATH=$(hadoop classpath --glob) ...." 

但是沒有任何工作。該命令本身正在工作,我使用它進行了測試:

ENTRYPOINT ["sh", "-c", "echo $(hadoop classpath --glob) >> /tmp/classpath.tmp ...." 

此文件包含啓動後的正確內容。因此,設置和維持環境變量只是一個問題。我應該如何設置環境變量?通常你使用類似

ENV CLASSPATH="some classpath" 

但在這裏我不能使用ENV聲明,因爲它不會處理命令$(hadoop classpath --glob)

回答

0

該問題的唯一工作解決方案是t o根本不在Dockerfile中使用ENTRYPOINT

  1. 創建entrypoint.sh
  2. 添加你需要的泊塢窗運行(例如出口)到該SH文件
  3. 複製entrypoint.sh在dockerfile到/
  4. EXECUT entrypoint.sh東西或dockercompose

注意:您需要執行. /entrypoint.sh。否則它不會工作。

1

在這種情況下,我寧願使用bash的輪廓變化SHELLsh -lc而不是sh -c

Dockerfile

FROM alpine 
RUN echo "export NAME=TARUNLALWANI" >> ~/.profile 
RUN echo $NAME 
SHELL ["sh", "-lc"] 
RUN echo $NAME 
CMD env 

輸出構建

$ docker build . --no-cache 
Step 1/6 : FROM alpine 
Step 2/6 : RUN echo "export NAME=TARUNLALWANI" >> ~/.profile 
Step 3/6 : RUN echo $NAME 

Step 4/6 : SHELL sh -lc 
Removing intermediate container a6a243f24519 
Step 5/6 : RUN echo $NAME 
TARUNLALWANI 
Successfully built 054f35a4d89a 

正如你可以看到sh -csh -lc開始加載我們的形象改變殼的。所以,你會更新.profile出口基於

CLASSPATH運行容器

$ docker run 054f35a4d89a 
HOSTNAME=92c4ca32b1f0 
SHLVL=1 
HOME=/root 
PAGER=less 
PS1=\h:\w\$ 
NAME=TARUNLALWANI 
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 
PWD=/ 
CHARSET=UTF-8 

編輯-1

試試這個,而無需配置文件的

ENTRYPOINT [] 
CMD ["/bin/sh", "-c", "export CLASSPATH=$(hadoop classpath --glob) && env"] 
+0

感謝您的回答,但這不會工作。我不能做'運行回聲'導出NAME = TARUNLAWANI「>>〜/ .profile',因爲當我用我真正需要的東西替換你的名字時'hadoop classpath --glob'我會得到一個錯誤,因爲此時hadoop沒有啓動然而。只有在構建完成之後,才能運行此命令。 – Mulgard

+0

然後在Dockerfile的最後一條命令中更改shell –

+0

我不明白它應該如何幫助更改shell。 – Mulgard

相關問題