在 Dockerfile FROM 参数中使用 --build-arg 值
Use --build-arg value in Dockerfile FROM parameter
我目前正在使用 AWS ECR 来托管我的项目图像,我需要参数 FROM 在 Dockerfile 中根据从命令行发送的 --build-arg 是动态的。示例:
$ 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:
Environment variables are supported by the following list of
instructions in the Dockerfile:
- ADD
- COPY
- ENV
- EXPOSE
- LABEL
- USER
- WORKDIR
- VOLUME
- STOPSIGNAL
as well as:
- ONBUILD (when combined with one of the supported instructions above)
要解决此问题,我怀疑您需要先使用外部进程生成 Dockerfile,例如使用 sed "s/__region__/$region/" <Dockerfile.in >Dockerfile
命令。
您的 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
我目前正在使用 AWS ECR 来托管我的项目图像,我需要参数 FROM 在 Dockerfile 中根据从命令行发送的 --build-arg 是动态的。示例:
$ 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:
Environment variables are supported by the following list of instructions in the Dockerfile:
- ADD
- COPY
- ENV
- EXPOSE
- LABEL
- USER
- WORKDIR
- VOLUME
- STOPSIGNAL
as well as:
- ONBUILD (when combined with one of the supported instructions above)
要解决此问题,我怀疑您需要先使用外部进程生成 Dockerfile,例如使用 sed "s/__region__/$region/" <Dockerfile.in >Dockerfile
命令。
您的 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