file_put_contents(/root/.composer/cache/repo/https---flex.symfony.com/):无法打开流:是一个目录错误。

8

我在Docker容器内使用Composer安装Symfony 4应用程序。

Composer版本1.10.19。

但是我遇到了以下错误:

[ErrorException] file_put_contents(/root/.composer/cache/repo/https---flex.symfony.com/):无法打开流:这是一个目录

如果我再次运行composer install而不中断,则构建成功。

如果我删除项目目录中的vendor和var/cache目录,则会再次出现错误。

我尝试了以下方法:

  • 触发 'composer clearcache' 命令,但没有成功
  • 删除 ~/.composer 目录,但没有成功
  • chmod -R 777 ~/.composer,但没有成功

在不同容器中进行相同项目的构建是成功的。我的容器从以下卷开始:

  • 项目目录

  • ~/.ssh 目录

我在网上搜索过,但没有找到解决方案。请帮忙。


rm -rf /root/.composer/cache/repo/https---flex.symfony.com && touch /root/.composer/cache/repo/https---flex.symfony.com 已经生效,不过还有其他解决方案吗? - rmznbyk 1
我希望解决方案不同于 composer update。因为 Symfony 会提示内存不足错误,我无法增加此内存限制。 - rmznbyk 1
你能不能通过使用 COMPOSER_MEMORY_LIMIT=-1 composer update 来增加它? - Dylan KAS
1
让你的Composer安装不使用缓存:composer install --no-cache ... 或者,如果您可以更新Flex,根据Symfony的创建者,它将解决问题:https://github.com/symfony/flex/issues/780 - Tmb
1个回答

3

这是Flex版本<1.13.4的一个错误。

在最新版本(我写作时的1.13.4),问题已经解决。

问题是:

使用空键写入缓存会失败并显示“打开流失败:是一个目录”,所以不要尝试这样做。

当Cloudflare或后端服务为我们的CI服务器(AWS)而非本地系统响应“Last-Modified”头文件时,我们注意到了这一点。这导致条件变为真,并尝试写入没有文件名的缓存文件。

该问题已通过提交d81196c3f3b5解决。

编辑:根据@Tmb发布的信息,解决方法是使用:composer install --no-cache ...


我曾经遇到过同样的问题,清除Composer缓存后问题得到了解决。 - Erik Baan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接