如何将当前docker build阶段的文件从一个目录复制到另一个目录?

如何将当前docker build阶段的文件从一个目录复制到另一个目录?,docker,dockerfile,Docker,Dockerfile,在多级docker构建中,如何复制作为当前阶段基础映像一部分的文件 例如,如果我想从alpine 3.7的基础图像开始,我如何将文件/etc/resolv.conf复制到我想要的地方 我的Dockerfile的第一个版本: # Dockerfile FROM alpine:3.7 as dev WORKDIR /test COPY /etc/resolv.conf /test # Dockerfile FROM alpine:3.7 as dev WORKDIR /test COPY --f

在多级docker构建中,如何复制作为当前阶段基础映像一部分的文件

例如,如果我想从alpine 3.7的基础图像开始,我如何将文件
/etc/resolv.conf
复制到我想要的地方


我的Dockerfile的第一个版本:

# Dockerfile
FROM alpine:3.7 as dev
WORKDIR /test
COPY /etc/resolv.conf /test
# Dockerfile
FROM alpine:3.7 as dev
WORKDIR /test
COPY --from=dev /etc/resolv.conf /test

我的Dockerfile的第二个版本:

# Dockerfile
FROM alpine:3.7 as dev
WORKDIR /test
COPY /etc/resolv.conf /test
# Dockerfile
FROM alpine:3.7 as dev
WORKDIR /test
COPY --from=dev /etc/resolv.conf /test

创建一个多阶段构建可能很难做到正确,但基本情况如下所示:

FROM alpine:3.7 as dev
WORKDIR /test

# ... Do additional stuff in the "dev" stage

# Define a new stage called whatever you want, here called "final"
FROM alpine:3.7 as final

# Copy from an earlier stage
COPY --from=dev /etc/resolv.conf /test

只有在引用前一个阶段时,才可以从中执行
。如果你只有一个阶段,它不会做任何有用的事情。它不能直接引用其他
Dockerfile
阶段,您必须有一个相应的
FROM。。。AS…
指令。

您的
FROM
中是否既有
AS-dev
部分,也有
COPY--FROM=dev…
部分?这些文件必须在同一个
Dockerfile
@tadman中-我不确定我是否遵循(我对docker很陌生)。我在“我尝试过的东西”和“我尝试过的其他东西”部分粘贴的这三行是我的
Dockerfile
的全部内容。问题是第一行只有一个阶段,第二行是从自身复制到自身?您需要来自
声明的两个
,才能进行多阶段构建。您是否只需要
运行cp…
即可使用标准的Unix
/bin/cp
命令?(另请参见。)
COPY
是从构建上下文复制到图像中,还是从上一个阶段复制。我明白了……因此,为了使用
COPY
必须在两个不同的阶段之间进行复制?即,
复制
在同一阶段不起作用?是否无法在同一阶段内将文件从src复制到dest?您可以在一个阶段内复制所有需要的文件,但如果是同一阶段,则不需要使用
--from
选项。这只适用于从不同的阶段进行拉取,特别是在您所处的阶段之前已经运行的阶段。我不是第一次尝试在不使用“-from”选项的情况下进行复制吗?如果是这样,为什么会失败呢?
COPY
的第一个参数被假定是相对于
Dockerfile
,而不是容器。要在容器中复制,请考虑使用<代码>运行CP…<代码>,在检查任何代码> DOCKFrase< /代码>时,检查并保持页面打开是值得的。这些事情很微妙。