从参数使用Dockerfile中的--Build-arg值 [英] Use --build-arg value in Dockerfile FROM parameter
本文介绍了从参数使用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屋!
查看全文