2016-08-19 474 views
1

我目前使用AWS ECR來託管我的項目鏡像,並且我需要參數FROM根據命令行發送的--build-arg在Dockerfile處爲動態。例如:使用Dockerfile中的--build-arg值參數

$ docker build --build-args region=us-east-1 . 

// Dockerfile 
FROM aws.ecr.huge.url.${region}/repo:php-apache 
WORKDIR /var/www 
RUN echo "@@@" 

$ {region}永遠不會被替換,並且我得到一個錯誤,表示圖像不存在。

如果我運行echo $ {region}它工作,問題似乎與FROM指令。

有什麼辦法可以達到這個目的嗎?

回答

4

更新答案:

通過引入multi-stage builds,碼頭工人加入FROM線之前提供一個ARG的能力。這看起來像:

# default to us-east-1 
ARG region=us-east-1 
FROM aws.ecr.huge.url.${region}/repo:php-apache 

請注意,ARG's are namespaced。當在FROM行之前定義時,它們可用於FROM行。在一個階段內,它們可以在該階段結束之前提供。如果您需要在多個名稱空間中使用ARG,則可以多次定義它。


從引進多級的前原來的答覆構建:

如你發現這是不支持,並作爲documented in the variable expansion limitations

環境變量被支持Dockerfile中的以下 指令列表:

  • ADD
  • COPY
  • ENV
  • EXPOSE
  • LABEL
  • 用戶
  • WORKDIR
  • VOLUME
  • STOPSIGNAL

還有:

  • ONBUILD(與上文所支持的指令一個組合)

要解決這個問題,我懷疑你需要先用一個外部程序來生成Dockerfile,例如用sed "s/__region__/$region/" <Dockerfile.in >Dockerfile命令。

+0

正確答案是 –

-1

您的Dockerfile中缺少ARG。 請試試這個。

$ docker build --build-args region=us-east-1 . 
// Dockerfile 
ARG region 
FROM aws.ecr.huge.url.${region}/repo:php-apache 
WORKDIR /var/www 
+0

'''FROM'''需要是dockerfile中的第一個(非註釋)命令 – renemilk