这个问题在这里已经有了答案:
How to include files outside of Docker's build context?
(17 个回答)
12 个月前关闭。
以下是Dockerfile
:
FROM golang:1.14.10
MAINTAINER xyz
COPY ~/go/bin/product-api /go/bin/product-api
COPY ~/go/bin/swagger /go/bin/swagger
ENTRYPOINT ["/go/bin/product-api"]
在
docker build -t cloud-native-product-api:1.0.0 .
,给出错误:Step 3/5 : COPY ~/go/bin/product-api /go/bin/product-api
COPY failed: stat /var/lib/docker/tmp/docker-builder398080099/~/go/bin/product-api: no such file or directory
我认为图像构建过程需要
/var/lib/docker/tmp/docker-builder398080099
作为工作区并从该路径引用。如何将文件从本地机器的特定文件夹复制到 Docker 镜像中?
最佳答案
您缺少的关键是构建的上下文,与文档的 COPY 部分相关:
路径必须在构建的上下文中;您不能 COPY ../something/something,因为 docker 构建的第一步是将上下文目录(和子目录)发送到 docker 守护进程。
https://docs.docker.com/engine/reference/builder/#copy
此处对“上下文”的描述。
https://docs.docker.com/engine/reference/commandline/build/
但本质上,当您说“docker build directory-with-docker-file”时,COPY 只会看到包含 Dockerfile 的目录中(及下方)的文件。
您可能想要做的是在 docker build 期间编译“swagger”,然后将其放在您想要的路径中。
要记住的一个关键点是,Dockerfile 通常是可复制的,这样如果您在十个不同的主机上运行 docker build,将生成完全相同的图像。从主机上的任意位置复制文件不会导致这种情况。
关于Dockerfile - 如何从本地文件夹复制文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64410123/