从参数使用Dockerfile中的--Build-arg值 [英] Use --build-arg value in Dockerfile FROM parameter

查看:0
本文介绍了从参数使用Dockerfile中的--Build-arg值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我目前正在使用AWS ECR托管我的项目映像,并且我需要根据从命令行发送的--Build-Arg在Dockerfile中动态地使用中的参数。示例:

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

有什么方法可以做到这一点吗?

推荐答案

更新答案:

随着multi-stage builds的引入,docker添加了在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

以下列表支持环境变量 文档文件中的说明:

  • 添加
  • 复制
  • ENV
  • 曝光
  • 标签
  • 用户
  • 工作目录
  • 音量
  • STOPSIGNAL

以及:

  • ONBUILD(当与上面支持的指令之一结合使用时)

要解决此问题,我怀疑您需要首先使用外部进程生成Docker文件,例如使用sed "s/__region__/$region/" <Dockerfile.in >Dockerfile命令。

这篇关于从参数使用Dockerfile中的--Build-arg值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆