在dockerfile中的FROM中使用ARG

问题描述 投票:0回答:3

问题陈述:我需要根据提供的arg从两个不同的url中拉取docker(projectA和projectB)。

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"
docker dockerfile
3个回答
11
投票

使用文档作为参考,如果您想在

ARG
之前使用
FROM
,请勿使用中间的任何内容。详情请参阅本节

这个最小的 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

如果您想在第一个

ARG
命令之后重新使用
FROM
值,文档还显示了一个示例:

ARG url=docker-local.artifactory.com/projectA 
FROM $url
ARG url
RUN echo $url

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

0
投票

跳到这里的旧线程......

但是在这个上浪费了几个小时之后,我认为值得一提 - 如果你想传递“FROM”部分的图像,ARG 必须是 Dockerfile 中的第一行!

否则,你会得到以下错误:

ERROR: failed to solve: base name (${BASE_IMAGE}) should not be blank

© www.soinside.com 2019 - 2024. All rights reserved.