dockerfile 使用变量复制

Fed*_*ini 7 docker dockerfile

是否可以使用变量作为 from 标志的参数从 dockerfile 内的另一个图像进行复制?

我要实现的目标如下

ARG MY_VERSION
COPY --from=my-image:$MY_VERSION /src /dst
Run Code Online (Sandbox Code Playgroud)

但我总是得到

标志值 my-image 无效:$MY_VERSION:参考格式无效

Han*_*ian 10

您可以做您想做的事情,但您需要有一个 FROM 语句来标识要从中复制的图像。像这样的东西

ARG MY_VERSION
FROM my-image:$MY_VERSION as source
FROM scratch as final
COPY --from=source /src /dst
Run Code Online (Sandbox Code Playgroud)

替换scratch为您要用于新图像的基本图像。

这是一个例子来证明它是有效的。Dockerfile:

ARG MY_VERSION
FROM ubuntu:$MY_VERSION as source
FROM alpine:latest
COPY --from=source /etc/os-release /
Run Code Online (Sandbox Code Playgroud)

构建并运行

docker build --build-arg MY_VERSION=20.04 -t test .
docker run --rm test cat /os-release
Run Code Online (Sandbox Code Playgroud)

输出显示

NAME="Ubuntu"
VERSION="20.04.2 LTS (Focal Fossa)"
ID=ubuntu
...
Run Code Online (Sandbox Code Playgroud)

这表明它已将文件从 Ubuntu 20.04 映像复制到 Alpine 映像。