构建Docker镜像时出现无效的引用格式

3

我在Dockerfile中有以下几行代码:

ARG SOMEARGUMENT
COPY --from=$SOMEARGUMENT /some/path/goes/here

其中SOMEARGUMENT可以是"some/repository:1.1.1"或"some/repository:2.2.2"

但是在尝试构建时,我总是会遇到错误:

invalid reference format: repository name must be lowercase

很明显,在构建镜像时传递的参数(即SOMEARGUMENT)没有被解析。

在Dockerfile中实际上是否可能做到这一点呢?

谢谢。

2个回答

4

有趣。我不知道这种行为。你能指导我如何使用它的文档吗?谢谢。 - Stefano
感谢Siyu的回答。我刚刚进行了测试,但它并没有起作用。我删除了“FROM scratch”指令并正在进行另一次测试,但至少在控制台输出中看到了一些进展。您知道这个“FROM scratch”的指令为什么会存在吗? - eindemwort
@eindemwort 你不能删除第二个 FROM:这两个 FROM 形成了一个多阶段构建,使您可以执行 COPY --from。我只是使用 FROM scratch 来说明这一点,它不必是这样的,常见的最后一个阶段可能是 FROM alpine,它是一个小型的 Linux 镜像。如果您告诉我们为什么需要这种行为,那将会很有帮助。 - Siyu
谢谢@Siyu!你的帮助非常有用! - eindemwort

2

在Siyu的回答基础上,我可以为你提供以下可能的解决方案:

Dockerfile:

ARG SOMEARGUMENT
ARG SOMEVERSION=latest

FROM ${SOMEARGUMENT}:${SOMEVERSION} as thebase
RUN echo "This is a test" > /test.txt


FROM alpine:latest
COPY --from=thebase /test.txt /success.txt

CMD cat /success.txt

构建命令:

docker build --build-arg SOMEARGUMENT=alpine --tag test .

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