复制Dockerfile中的文件,没有这样的文件或目录?

Gre*_*dot 51 docker

我在root(〜)文件夹中设置了Dockerfile.我文件的前三行看起来像这样:

COPY file1 /root/folder/
COPY file2 /root/folder/
COPY file3 /root/folder/
Run Code Online (Sandbox Code Playgroud)

但它为每一行返回以下错误:

没有相应的文件和目录

这些文件与我的Dockerfile位于同一目录中,我也在docker build - < Dockerfile终端的同一目录中运行该命令.

这到底我做错了什么?

swa*_*eek 143

也检查.dockerignore文件.

我知道这是一个非常罕见的案例,但我在那里提到了那个文件.

  • 感谢抬头,在我的情况下,我使用视觉工作室向导为docker,它在第一行添加了一个带有*的.dockerignore :( (4认同)
  • 哦,我的上帝,谢谢你。我正在更改 Java 项目的名称(以及工件和构建目录),并且 `ripgrep` 不在点文件中搜索,所以我没有看到对旧目录的最后一个讨厌的引用。 (3认同)

Pop*_*eye 27

这可能是由于您将file1/file2/file3称为绝对路径而不是构建上下文,Docker仅在构建上下文中搜索路径.

例如,如果您使用COPY/home/yourname/file1,则Docker构建会将其解释为$ {docker build working directory}/home/yourname/file1,如果此处没有相同名称的文件,则不会引发文件或目录错误.

请参阅docker问题之一

  • @AlexanderMills Dockerfiles应该可以在主机上独立运行,并附带相对于Dockerfile的路径中可用的其他文件.使用绝对路径会使其仅在您的计算机上运行. (6认同)

ask*_*skb 16

在复制指令Dockerfile副本中的文件srcdest文件夹.看起来你是丢失的file1,file2file3或试图建立Dockerfile从错误的文件夹.

请参阅Dockerfile文档

建立它的命令也Dockerfile应该是这样的.

cd into/the/folder/
docker build -t sometagname .
Run Code Online (Sandbox Code Playgroud)

  • 还要检查是否存在Docker Ignore文件. (13认同)
  • 我在正确阅读你的链接后发现DockerFile根本不应该在根文件夹中.将所有内容移动到子目录,运行build命令并运行.你的答案是最有帮助的,所以我会把它标记为正确. (3认同)
  • 第二个命令对我来说失败了,说“ build”需要一个参数。 (2认同)

Tal*_*ree 14

似乎命令:

docker build -t imagename .
Run Code Online (Sandbox Code Playgroud)

和:

docker build -t imagename - < Dockerfile2
Run Code Online (Sandbox Code Playgroud)

没有以同样的方式执行.如果要使用Dockerfile和Dockerfile2在一个文件夹中构建2个docker镜像,则不能在第二个示例中使用stdin(<Dockerfile2)来使用COPY命令.相反,你必须使用:

docker build -t imagename -f Dockerfile2 .
Run Code Online (Sandbox Code Playgroud)

然后COPY按预期工作.


N D*_*oye 11

在 PS 上执行docker build - < DockerfileGet-Content .\Dockerfile | Docker build -可能无法获取上下文。我建议你使用

Docker build -f .\Path\Dockerfile . 
Run Code Online (Sandbox Code Playgroud)


LiH*_*RaM 8

我刚刚遇到了这个问题,这里的建议都没有解决我的问题。原来我错了行结束我的文件,并有将其更改为相应的行尾。(在这种情况下,从 CRLF 到 LF,所以 Ubuntu 14.04 会识别我一直在 Windows 上编辑的脚本。)

我使用 VSCode 更改了行尾,大多数代码编辑器应该可以选择行尾。

希望这可以帮助某人。


fuf*_*nzo 7

我觉得有点愚蠢,但我的问题是我正在运行 docker-compose,并且我的 Dockerfile 位于 ./deploy 子目录中。我的 ADD 引用需要相对于项目的根目录,而不是 Dockerfile。

更改:ADD ./file.tar.gz /etc/folder/ 为:ADD ./deploy/file.tar.gz /etc/folder/

不管怎样,我想我会发帖以防有人遇到同样的问题。


A S*_*tar 6

尝试从其他目录运行docker文件时,这发生在我身上。

我有,COPY failed: stat /var/lib/docker/tmp/docker-builder929708051/XXXX: no such file or directory并通过指定docker文件设法解决了这一问题。

运行正常docker build . -f docker/development/Dockerfile

但是运行Runningdocker build docker / development / Dockerfile`导致了这个问题。

-f--file指定的名称和位置Dockerfile

起初它很奇怪,因为当我Dockerfile在apps根目录中有它时,它工作正常。如果您想更好地管理环境docker文件,这将有所帮助。

  • 由于 Docker 上下文和相对路径的限制,这非常有用,因为我没有考虑过它。谢谢! (2认同)

小智 6

问题就在这里:

\n
\n

如果使用 STDIN (docker build - < somefile) 构建,则没有\n构建上下文,因此可以使用 COPY\xe2\x80\x99t。

\n
\n

欲了解更多信息:https://docs.docker.com/engine/reference/builder/#copy

\n

只需以这种方式构建 docker:

\n
docker build -t name-of-your-tag .\n
Run Code Online (Sandbox Code Playgroud)\n


Ann*_*ker 5

这是解决方案和最佳实践:

您需要创建一个资源文件夹,您可以在其中保存要复制的所有文件。

??? Dockerfile
??? resources
?     ??? file1.txt
?     ??? file2.js
Run Code Online (Sandbox Code Playgroud)

复制文件的命令应该这样指定:

COPY resources /root/folder/
Run Code Online (Sandbox Code Playgroud)

在哪里

* resources - 您在 Dockerfile 所在的同一文件夹中创建的本地文件夹

* /root/folder/ - 容器中的文件夹