在Dockerfile中使用FROM的ARG参数

9
问题陈述:我需要根据提供的参数从两个不同的URL(projectA和projectB)中拉取Docker镜像。
ARG url=docker-local.artifactory.com/projectA #By default its for A.
RUN echo ${url}
FROM $url

理想解决方案:

docker build -t hello . 应该构建项目A的Docker。

docker build --build-arg url="docker-local.artifactory.com/projectB" -t hello . 应该构建项目B的Docker。

当前问题:

"base name ($url) should not be blank"

你应该包含一个完整的Dockerfile,因为在第一个from步骤之前有一个run步骤是无效的。我假设还有另一个from步骤,这会影响到如何回答这个问题。 - BMitch
2个回答

11
使用文档作为参考,如果想在 FROM 之前使用 ARG,请不要使用任何中间内容。有关详细信息,请参见此部分
此最小 Dockerfile 可以正常工作:
ARG url=docker-local.artifactory.com/projectA 
FROM $url

使用以下构建参数构建:

docker build -t from --build-arg url=alpine:3.9 .
[+] Building 0.1s (5/5) FINISHED
 => [internal] load build definition from Dockerfile                                                               0.0s
 => => transferring dockerfile: 116B                                                                               0.0s
 => [internal] load .dockerignore                                                                                  0.0s
 => => transferring context: 2B                                                                                    0.0s
 => [internal] load metadata for docker.io/library/alpine:3.9                                                      0.0s
 => CACHED [1/1] FROM docker.io/library/alpine:3.9                                                                 0.0s
 => exporting to image                                                                                             0.0s
 => => exporting layers                                                                                            0.0s
 => => writing image sha256:352159a49b502edb1c17a3ad142b320155bd541830000c02093b79f4058a3bd1                       0.0s
 => => naming to docker.io/library/from

文档还展示了一个示例,如果你想在第一个FROM命令之后再次使用ARG值:
ARG url=docker-local.artifactory.com/projectA 
FROM $url
ARG url
RUN echo $url

感谢您的帮助。但奇怪的是,它在我的本地环境中可以运行。但当我在Git管道上运行时,输出为"url"。 - Isha Nema

2
使用以下构建文件,
ARG VERSION=busybox:latest
FROM $VERSION
ARG VERSION
RUN echo $VERSION

使用默认值运行

docker build -t test .
Sending build context to Docker daemon  16.38kB
Step 1/4 : ARG VERSION=busybox:latest
Step 2/4 : FROM $VERSION
latest: Pulling from library/busybox

在构建过程中值发生了改变

docker build -t test --build-arg VERSION="ubuntu:20.04" .
Sending build context to Docker daemon  16.38kB
Step 1/4 : ARG VERSION=busybox:latest
Step 2/4 : FROM $VERSION
20.04: Pulling from library/ubuntu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接