2016-08-19 29 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