从参数使用Dockerfile中的--Build-arg值

人气:654 发布:2022-10-16 标签: amazon-web-services docker devops dockerfile amazon-ecs

问题描述

我目前正在使用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命令。

411