Lea*_*oCR 2 amazon-web-services amazon-ecs docker dockerfile devops
我目前正在使用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 "@@@"
Run Code Online (Sandbox Code Playgroud)
$ {region}永远不会被替换,我得到一个错误,说图像不存在.
如果我运行echo $ {region}它可以工作,问题似乎是FROM指令.
有没有办法实现这一目标?
更新的答案:
随着多阶段构建的引入,docker增加了提供在线ARG之前的能力FROM.这看起来像:
# default to us-east-1
ARG region=us-east-1
FROM aws.ecr.huge.url.${region}/repo:php-apache
Run Code Online (Sandbox Code Playgroud)
请注意,ARG它们是命名空间.FROM在行之前定义时,它们可用于FROM行.在一个阶段,它们可用到该阶段结束.如果需要ARG在多个名称空间中使用,则可以多次定义它.
在引入多阶段构建之前的原始答案:
如您所见,这不受支持,并且如变量扩展限制中所述:
Dockerfile中的以下指令列表支持环境变量:
- 加
- 复制
- ENV
- 暴露
- 标签
- 用户
- WORKDIR
- 体积
- STOPSIGNAL
以及:
- ONBUILD(当与上面支持的指令之一结合使用时)
为了解决这个问题,我怀疑你需要首先使用外部进程生成Dockerfile,例如使用sed "s/__region__/$region/" <Dockerfile.in >Dockerfile命令.