2016-02-22 92 views
3

我有一個Dockerfile如下圖所示:如何在docker build中提供和使用命令行參數?

FROM centos:centos6 
MAINTAINER tapash 

###### Helpful utils 
RUN yum -y install sudo 
RUN yum -y install curl 
RUN yum -y install unzip 

#########Copy hibernate.cfg.xml to Client 

ADD ${hibernate_path}/hibernate.cfg.xml /usr/share/tomcat7/webapps/roc_client/WEB-INF/classes/ 

我需要搬運工構建過程中要傳遞的命令行參數爲$ hibernate_path指定。

我該怎麼做?

+1

親愛的負面選民..我知道這個問題有什麼問題嗎? –

+0

這不起作用。碼頭文件只有一次讀取,當你建立你的圖像。 –

回答

7

如果這是一個純粹的集結時間變量,你可以使用--build-arg option of docker build的腳本。

該標誌允許您傳遞像Dockerfile的RUN指令中的常規環境變量那樣訪問的構建時變量。此外,這些值不會持續存在於中間或最終圖像中,例如ENV值。

docker build --build-arg hibernate_path=/a/path/to/hibernate -t tag . 

在1.7中,只有靜態ENV Dockerfile directive可用。
因此,一種解決方案是從模板Dockerfile.tpl生成所需的Dockerfile。

Dockerfile.tpl: 

... 
ENV hibernate_path=xxx 
ADD xxx/hibernate.cfg.xml /usr/share/tomcat7/webapps/roc_client/WEB-INF/classes/ 
... 

每當你想建立形象,你首先生成Dockerfile:

sed "s,xxx,${hibernate_path},g" Dockerfile.tpl > Dockerfile 

然後你建立正常:docker build -t myimage .

然後從(在泊塢窗1.7)受益:

  • 建造時環境置換
  • 運行時環境變量。
+0

試過這個。說:提供的標誌,但沒有定義:--build-arg 請參閱「碼頭建設 - 幫助」。 –

+1

你必須有碼頭1.9或1.10 – VonC

+0

嗯..我使用碼頭1.7。任何選項? –

0

你創建你Dockerfile把所需的值,並啓動docker build -t mytag .

相關問題