我目前正在使用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 "@@@"
$ {region}永远不会被替换,我收到一条错误,说图片不存在。
如果我运行echo $ {region}它可以工作,问题似乎是FROM指令。
有没有办法实现这个目标?
答案 0 :(得分:5)
更新回答:
随着multi-stage builds的引入,docker添加了在func loadImageFromPath(path: String) -> UIImage? {
let image = UIImage(contentsOfFile: path)
return image
}
行之前提供ARG
的功能。这看起来像是:
FROM
请注意ARG
's are namespaced。在# default to us-east-1
ARG region=us-east-1
FROM aws.ecr.huge.url.${region}/repo:php-apache
行之前定义时,它们可用于FROM
行。在一个阶段,它们可用到该阶段结束。如果您需要在多个名称空间中使用FROM
,则可以多次定义它。
引入多阶段构建之前的原始答案:
您找不到支持,documented in the variable expansion limitations
支持以下列表支持环境变量 Dockerfile中的说明:
- ADD
- COPY
- ENV
- EXPOSE
- LABEL
- USER
- WORKDIR
- VOLUME
- STOPSIGNAL
以及:
- ONBUILD(与上述支持说明之一结合使用时)
要解决此问题,我怀疑您是否需要先使用外部进程生成Dockerfile,例如:使用ARG
命令。
答案 1 :(得分:0)
Dockerfile中缺少ARG。 请试试这个。
$ docker build --build-args region=us-east-1 .
// Dockerfile
ARG region
FROM aws.ecr.huge.url.${region}/repo:php-apache
WORKDIR /var/www