【问题标题】:How can I solve "unable to prepare context: path "." not found" docker build's error?如何解决“无法准备上下文:路径”。“未找到”docker build 的错误?
【发布时间】:2019-01-05 22:46:40
【问题描述】:

我正在尝试从我的 Dockerfile 构建 Docker 映像。我在 CentOS 7 来宾操作系统上安装了 Docker-CE 18.06,在 VMWare Player 14 上运行。项目目录位于通过 VMWare 的 vmhgfs-fuse 工具安装的共享文件夹内。我的主机操作系统是 Windows 10 Home。到目前为止,我还没有在这个项目中使用 docker-compose。

[superdurszlak@localhost 候选匹配]$ sudo docker build -t 候选匹配。

无法准备上下文:路径“。”没找到

[superdurszlak@localhost 候选匹配]$ sudo docker build -t 候选匹配 --file ./Dockerfile .

无法准备上下文:路径“。”没找到

我已经仔细检查了我的 Dockerfile 是否正确命名、我的 docker 守护程序是否启动并运行、我的工作目录是否正确以及共享文件夹的内容是否可以从来宾操作系统内部访问而没有问题。

此类错误的可能原因是什么?

【问题讨论】:

    标签: docker centos centos7


    【解决方案1】:

    这是一个权限问题。如果 root 用户无权读取您的当前目录,并且您使用 sudo 运行 docker 命令,那么您将看到“未找到”错误。这可能表明父目录在最后一节中没有读取和执行权限(例如,chmod 700 $HOME 会破坏对 $HOME/my_proj 的 root 访问权限)。

    两种解决方案:

    1. 如您所见,以您自己的用户而不是 root 用户身份运行命令。这是通过将自己添加到 docker 组来完成的:sudo usermod -aG docker $(id -un) && newgrp docker

    2. 将使用chmod 的父目录的权限固定为至少0755。确保这些目录中的任何敏感文件都受到适当限制(例如0600)。

    【讨论】:

    • 我的问题是我的用户 umask 错了。采取了三个步骤来修复:(1.)我用chmod 0755 dir_name(2.)修复了所有父目录,然后我确保将我的 bashrc 和 cshrc 更新为umask 002(3.)然后我做了一个新的 git clone 所以所有创建的文件都具有正确的文件权限(来自umask 002)。然后一切正常。
    【解决方案2】:

    显然,上述问题的解决方案很简单,但对于没有经验的 Docker 用户来说可能并不明显。我需要将我的用户添加到组 docker 以便从放置在共享文件夹中的 Dockerfile 构建 docker 映像。

    有趣的是,我现在可以以没有 root 权限的用户身份构建我的 docker 镜像:

    [superdurszlak@localhost 候选匹配]$ docker build .

    将构建上下文发送到 Docker 守护进程 1.055MB

    第 1/8 步:来自 ubuntu:18.04

    工作正常

    但是运行 sudo docker build ... 仍然会导致问题中提到的错误。

    根据 docker docs,将用户添加到 docker 组是可选的,但是: https://docs.docker.com/install/linux/linux-postinstall/

    【讨论】:

      猜你喜欢
      • 2020-06-21
      • 1970-01-01
      • 2022-12-24
      • 2016-06-01
      • 2019-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多