docker build错误检查上下文:'不能统计'\\?\ C:\ Users\username\AppData\Local\Application Data''

Vij*_*van 10 build docker

在Windows 10上docker build失败了,

docker安装成功后,使用下面的命令构建docker镜像.

docker build -t drtuts:最新.面对下面的问题. 在此输入图像描述

如果有人解决了同样的问题,请告诉我.

Jul*_*nel 36

问题是当前用户不是目录的所有者。
我在 Ubuntu 中遇到了同样的问题,这一行解决了这个问题:

Ubuntu

sudo chown -R $USER <path-to-folder>
Run Code Online (Sandbox Code Playgroud)

来源:更改文件夹权限和所有权

视窗

此链接显示如何在 Windows 中执行相同操作:
在 Windows 10 中通过命令提示符获取文件/文件夹的所有权


小智 21

只需创建一个新目录并输入它:

$ mkdir dockerfiles
$ cd dockerfiles
Run Code Online (Sandbox Code Playgroud)

在该目录中创建您的文件:

$ touch Dockerfile
Run Code Online (Sandbox Code Playgroud)

编辑它并添加命令vi:

$ vi Dockerfile
Run Code Online (Sandbox Code Playgroud)

最后运行它:

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

  • 问题是为什么?为什么在`/c/Users/myuser/dockerfiles` 中有效而不在`/c/Users/myuser` (3认同)
  • 问题是在 Windows 容器上运行的 docker 而不是 linux (2认同)

小智 16

问题说明

当您运行该docker build命令时,Docker 客户端会收集需要发送到 Docker 守护程序的所有文件,以便它可以构建映像。这个文件的“包”称为context

将哪些文件和目录添加到上下文中?
上下文包含您传递给docker build命令的目录中的所有文件和子目录。例如,当您调用 时docker build img:tag dir_to_build,上下文将是 内部的所有内容dir_to_build

如果 Docker 客户端没有足够的权限来读取上下文中的某些文件,则会error checking context: 'can't stat ' <FILENAME>出现错误。

这个问题有两种解决方案:

  1. 将您的 Dockerfile 以及构建映像所需的文件移动到separate_dir不包含其他文件/子目录的单独目录。当您现在调用 时docker build img:tag separate_dir,上下文将仅包含构建映像实际所需的文件。(如果错误仍然存​​在,则意味着您需要更改文件的权限,以便 Docker 客户端可以访问它们)。
  2. 使用.dockerignore文件从上下文中排除文件。大多数情况下,这可能是您想要做的。

来自官方 Docker 文档

在 docker CLI 将上下文发送到docker守护进程之前,它会在上下文的根目录中查找名为.dockerignore的文件。如果此文件存在,CLI 会修改上下文以排除与其中的模式匹配的文件和目录

回答问题

我想创建一个.dockerignore在同一目录下的文件Dockerfile~/.dockerignore具有以下内容:

# By default, ignore everything
*
# Add exception for the directories you actually want to include in the context
!project-source-code
!project-config-dir
# source files
!*.py
!*.sh
Run Code Online (Sandbox Code Playgroud)

进一步阅读:


小智 6

Docker 只授予文件所有者的读写权限,如果尝试构建的用户与所有者不同,有时会抛出错误。

您可以创建一个 docker 组并在那里添加用户。在 debian 中将如下

sudo groupadd docker

sudo usermod -aG docker $USER