docker-compose IOError:无法在上下文中访问文件

Sea*_*ean 5 docker docker-compose docker-for-windows

Docker构建将构建并运行映像,但在docker-compose期间,我收到以下错误:

    > .\docker-compose-Windows-x86_64.exe -f C:\t\tea\docker-compose.yml up
Building web
Traceback (most recent call last):
  File "docker-compose", line 6, in <module>
  File "compose\cli\main.py", line 71, in main
  File "compose\cli\main.py", line 127, in perform_command
  File "compose\cli\main.py", line 1039, in up
  File "compose\cli\main.py", line 1035, in up
  File "compose\project.py", line 465, in up
  File "compose\service.py", line 327, in ensure_image_exists
  File "compose\service.py", line 999, in build
  File "site-packages\docker\api\build.py", line 149, in build
  File "site-packages\docker\utils\build.py", line 15, in tar
  File "site-packages\docker\utils\utils.py", line 100, in create_archive
  File "tarfile.py", line 1802, in gettarinfo
  FileNotFoundError: [WinError 3] The system cannot find the path specified: 
  'C:\\t\\tea\\src\\app\\accSettings\\account-settings-main\\components\\account-settings-catalog\\components\\account-settings-copy-catalog-main\\components\\account-settings-copy-catalog-destination\\components\\account-settings-copy-destination-table\\account-settings-copy-destination-table.component.html'
[18400] Failed to execute script docker-compose

> docker -v
Docker version 18.03.0-ce-rc1, build c160c73
> docker-compose -v
docker-compose version 1.19.0, build 9e633ef3
Run Code Online (Sandbox Code Playgroud)

我已经在我的本地组策略编辑器中启用了Win32长路径,但没有运气解决这个问题.

如果它有帮助,这是docker-compose.yml:

version: '3'

services:
  web:
    image: web
    build:
      context: .
      dockerfile: Dockerfile
Run Code Online (Sandbox Code Playgroud)

And*_*zen 1

在某些情况下,这是 docker-compose 的一个已知问题。并且,它与 Windows 上 MAX_PATH 260 个字符的限制有关。

摘自 Microsoft 文档中有关最大路径长度限制的内容

在 Windows API 中(除了以下段落中讨论的一些例外情况),路径的最大长度为 MAX_PATH,定义为 260 个字符。

通过阅读本文,该解决方案似乎取决于您的 docker-compose 版本和 Windows 版本。以下是我找到的解决方案的摘要:

解决方案#1

升级到 docker-compose版本 1.23.0或更高版本。1.23.0 版本中有一个错误修复,描述如下:

修复了 Windows 客户端上路径长度超过 260 个字符会导致 docker-compose 构建失败的问题。

解决方案#2

启用 NTFS 长路径:

  1. 按 Windows 键,输入 gpedit.msc 并按 Enter。
  2. 导航到本地计算机策略 > 计算机配置 > 管理模板 > 系统 > 文件系统 > NTFS。
  3. 双击启用 NTFS 长路径选项并将其启用。

如果您使用的 Windows 版本不提供组策略访问权限,则可以编辑注册表。

  1. 按 Windows 键,输入 regedit,然后按 Enter。
  2. 导航到 HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\ CurrentVersion\Group Policy Objects\ {48981759-12F2-42A6-A048-028B3973495F} Machine\System\CurrentControlSet\Policies
  3. 选择 LongPathsEnabled 项,或者将其创建为 DWORD(32 位)值(如果不存在)。
  4. 将值设置为 1 并关闭注册表编辑器。

解决方案#3

通过 pip 安装 docker-compose。这似乎已经为遇到此问题的其他人解决了问题。

来自 docker-compose 文档的专家:

对于alpine,需要以下依赖包:py-pip、 python-dev、libffi-dev、openssl-dev、gcc、libc-dev、 和make。

可以使用 pypi 从 pypi 安装 Compose pip。如果您使用 进行安装 pip,我们建议您使用 virtualenv,因为许多操作系统都有与 docker-compose 依赖项冲突的 python 系统包。请参阅 virtualenv 教程以开始使用。

pip install docker-compose
Run Code Online (Sandbox Code Playgroud)

如果您没有使用 virtualenv,

sudo pip install docker-compose
Run Code Online (Sandbox Code Playgroud)

需要 pip 版本 6.0 或更高版本。