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

Lea*_*oCR 2 amazon-web-services amazon-ecs docker dockerfile devops

我目前正在使用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 "@@@"
Run Code Online (Sandbox Code Playgroud)

$ {region}永远不会被替换,我得到一个错误,说图像不存在.

如果我运行echo $ {region}它可以工作,问题似乎是FROM指令.

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

BMi*_*tch 5

更新的答案:

随着多阶段构建的引入,docker增加了提供在线ARG之前的能力FROM.这看起来像:

# default to us-east-1
ARG region=us-east-1
FROM aws.ecr.huge.url.${region}/repo:php-apache
Run Code Online (Sandbox Code Playgroud)

请注意,ARG它们是命名空间.FROM在行之前定义时,它们可用于FROM行.在一个阶段,它们可用到该阶段结束.如果需要ARG在多个名称空间中使用,则可以多次定义它.


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

如您所见,这不受支持,并且如变量扩展限制中所述:

Dockerfile中的以下指令列表支持环境变量:

  • 复制
  • ENV
  • 暴露
  • 标签
  • 用户
  • WORKDIR
  • 体积
  • STOPSIGNAL

以及:

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

为了解决这个问题,我怀疑你需要首先使用外部进程生成Dockerfile,例如使用sed "s/__region__/$region/" <Dockerfile.in >Dockerfile命令.