在Dockerfile FROM参数中使用--build-arg值

时间:2016-08-19 22:40:27

标签: amazon-web-services docker dockerfile devops amazon-ecs

我目前正在使用AWS ECR来托管我的项目图像,我需要根据从命令行发送的--build-arg在Dockerfile中将参数FROM设置为动态。例如:

$ 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指令。

有没有办法实现这个目标?

2 个答案:

答案 0 :(得分:5)

更新回答:

随着multi-stage builds的引入,docker添加了在func loadImageFromPath(path: String) -> UIImage? { let image = UIImage(contentsOfFile: path) return image } 行之前提供ARG的功能。这看起来像是:

FROM

请注意ARG's are namespaced。在# default to us-east-1 ARG region=us-east-1 FROM aws.ecr.huge.url.${region}/repo:php-apache 行之前定义时,它们可用于FROM行。在一个阶段,它们可用到该阶段结束。如果您需要在多个名称空间中使用FROM,则可以多次定义它。

引入多阶段构建之前的原始答案:

您找不到支持,documented in the variable expansion limitations

支持
  

以下列表支持环境变量   Dockerfile中的说明:

     
      
  • ADD
  •   
  • COPY
  •   
  • ENV
  •   
  • EXPOSE
  •   
  • LABEL
  •   
  • USER
  •   
  • WORKDIR
  •   
  • VOLUME
  •   
  • STOPSIGNAL
  •   
     

以及:

     
      
  • ONBUILD(与上述支持说明之一结合使用时)
  •   

要解决此问题,我怀疑您是否需要先使用外部进程生成Dockerfile,例如:使用ARG命令。

答案 1 :(得分:0)

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