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