Score:0

Composer install times out with a bind-mounted volume running Composer through Docker

hu flag

I've been working on trying to set up a Drupal 10 local development instance on my Windows machine and keep running into an issue of the Drupal installation failing when I have a volume mounted.

Following the instructions given on Using Composer to Install Drupal and Manage Dependencies / Installing with Composer via Docker, I've run docker run --rm -i --tty -v %cd%/drupal:/app/drupal composer create-project drupal/recommended-project drupal --ignore-platform-reqs.

It shows the following output.

Creating a "drupal/recommended-project" project at "./drupal"
Installing drupal/recommended-project (10.0.9)

  • Downloading drupal/recommended-project (10.0.9)
  • Installing drupal/recommended-project (10.0.9): Extracting archive Created project in /app/drupal

Installing dependencies from lock file (including require-dev)
Verifying lock file contents can be installed on current platform.
Package operations: 54 installs, 0 updates, 0 removals

  • Downloading composer/installers (v2.2.0)
  • Downloading drupal/core-composer-scaffold (10.0.9)
  • Downloading drupal/core-project-message (10.0.9)
  • Downloading symfony/polyfill-mbstring (v1.27.0)
  • Downloading symfony/polyfill-ctype (v1.27.0)
  • Downloading twig/twig (v3.5.1)
  • Downloading symfony/yaml (v6.2.10)
  • Downloading symfony/var-exporter (v6.2.10)
  • Downloading symfony/var-dumper (v6.2.10)
  • Downloading symfony/translation-contracts (v3.2.1)
  • Downloading symfony/deprecation-contracts (v3.2.1)
  • Downloading symfony/validator (v6.2.10)
  • Downloading symfony/polyfill-intl-normalizer (v1.27.0)
  • Downloading symfony/polyfill-intl-grapheme (v1.27.0)
  • Downloading symfony/string (v6.2.8)
  • Downloading psr/container (2.0.2)
  • Downloading symfony/service-contracts (v3.2.1)
  • Downloading symfony/serializer (v6.2.10)
  • Downloading symfony/routing (v6.2.8)
  • Downloading symfony/http-foundation (v6.2.10)
  • Downloading psr/http-message (1.0.1)
  • Downloading symfony/psr-http-message-bridge (v2.1.4)
  • Downloading symfony/process (v6.2.10)
  • Downloading symfony/polyfill-php72 (v1.27.0)
  • Downloading symfony/polyfill-intl-idn (v1.27.0)
  • Downloading symfony/polyfill-iconv (v1.27.0)
  • Downloading symfony/mime (v6.2.10)
  • Downloading psr/event-dispatcher (1.0.0)
  • Downloading symfony/event-dispatcher-contracts (v3.2.1)
  • Downloading symfony/event-dispatcher (v6.2.8)
  • Downloading psr/log (3.0.0)
  • Downloading symfony/error-handler (v6.2.10)
  • Downloading symfony/http-kernel (v6.2.10)
  • Downloading symfony/dependency-injection (v6.2.10)
  • Downloading symfony/console (v6.2.10)
  • Downloading ralouphie/getallheaders (3.0.3)
  • Downloading psr/http-factory (1.0.2)
  • Downloading psr/http-client (1.0.2)
  • Downloading psr/cache (3.0.0)
  • Downloading pear/pear_exception (v1.0.2)
  • Downloading pear/console_getopt (v1.4.3)
  • Downloading pear/pear-core-minimal (v1.10.13)
  • Downloading pear/archive_tar (1.4.14)
  • Downloading masterminds/html5 (2.7.6)
  • Downloading guzzlehttp/psr7 (2.4.5)
  • Downloading guzzlehttp/promises (1.5.2)
  • Downloading guzzlehttp/guzzle (7.5.1)
  • Downloading doctrine/lexer (1.2.3)
  • Downloading egulias/email-validator (3.2.5)
  • Downloading doctrine/annotations (1.13.3)
  • Downloading composer/semver (3.3.2)
  • Downloading asm89/stack-cors (v2.1.1)
  • Downloading drupal/core (10.0.9)
  • Installing composer/installers (v2.2.0): Extracting archive
  • Installing drupal/core-composer-scaffold (10.0.9): Extracting archive
  • Installing drupal/core-project-message (10.0.9): Extracting archive
  • Installing symfony/polyfill-mbstring (v1.27.0): Extracting archive
  • Installing symfony/polyfill-ctype (v1.27.0): Extracting archive
  • Installing twig/twig (v3.5.1): Extracting archive
  • Installing symfony/yaml (v6.2.10): Extracting archive
  • Installing symfony/var-exporter (v6.2.10): Extracting archive
  • Installing symfony/var-dumper (v6.2.10): Extracting archive
  • Installing symfony/translation-contracts (v3.2.1): Extracting archive
  • Installing symfony/deprecation-contracts (v3.2.1): Extracting archive
  • Installing symfony/validator (v6.2.10): Extracting archive
  • Installing symfony/polyfill-intl-normalizer (v1.27.0): Extracting archive
  • Installing symfony/polyfill-intl-grapheme (v1.27.0): Extracting archive
  • Installing symfony/string (v6.2.8): Extracting archive
  • Installing psr/container (2.0.2): Extracting archive
  • Installing symfony/service-contracts (v3.2.1): Extracting archive
  • Installing symfony/serializer (v6.2.10): Extracting archive
  • Installing symfony/routing (v6.2.8): Extracting archive
  • Installing symfony/http-foundation (v6.2.10): Extracting archive
  • Installing psr/http-message (1.0.1): Extracting archive
  • Installing symfony/psr-http-message-bridge (v2.1.4): Extracting archive
  • Installing symfony/process (v6.2.10): Extracting archive
  • Installing symfony/polyfill-php72 (v1.27.0): Extracting archive
  • Installing symfony/polyfill-intl-idn (v1.27.0): Extracting archive
  • Installing symfony/polyfill-iconv (v1.27.0): Extracting archive
  • Installing symfony/mime (v6.2.10): Extracting archive
  • Installing psr/event-dispatcher (1.0.0): Extracting archive
  • Installing symfony/event-dispatcher-contracts (v3.2.1): Extracting archive
  • Installing symfony/event-dispatcher (v6.2.8): Extracting archive
  • Installing psr/log (3.0.0): Extracting archive
  • Installing symfony/error-handler (v6.2.10): Extracting archive
  • Installing symfony/http-kernel (v6.2.10): Extracting archive
  • Installing symfony/dependency-injection (v6.2.10): Extracting archive
  • Installing symfony/console (v6.2.10): Extracting archive
  • Installing ralouphie/getallheaders (3.0.3): Extracting archive
  • Installing psr/http-factory (1.0.2): Extracting archive
  • Installing psr/http-client (1.0.2): Extracting archive
  • Installing psr/cache (3.0.0): Extracting archive
  • Installing pear/pear_exception (v1.0.2): Extracting archive
  • Installing pear/console_getopt (v1.4.3): Extracting archive
  • Installing pear/pear-core-minimal (v1.10.13): Extracting archive
  • Installing pear/archive_tar (1.4.14): Extracting archive
  • Installing masterminds/html5 (2.7.6): Extracting archive
  • Installing guzzlehttp/psr7 (2.4.5): Extracting archive
  • Installing guzzlehttp/promises (1.5.2): Extracting archive
  • Installing guzzlehttp/guzzle (7.5.1): Extracting archive
  • Installing doctrine/lexer (1.2.3): Extracting archive
  • Installing egulias/email-validator (3.2.5): Extracting archive
  • Installing doctrine/annotations (1.13.3): Extracting archive
  • Installing composer/semver (3.3.2): Extracting archive
  • Installing asm89/stack-cors (v2.1.1): Extracting archive
  • Installing drupal/core (10.0.9): Extracting archive
  • Installing drupal/core-recommended (10.0.9)
    49/50 [===========================>] 98% Install of drupal/core failed
    The following exception is caused by a process timeout
    Check https://getcomposer.org/doc/06-config.md#process-timeout for details

In Process.php line 1204:

The process "'/usr/bin/unzip' -qq '/app/drupal/vendor/composer/tmp-474185fb585211701bb055d78240c392' -d '/app/drupal/vendor/composer/020e9631'" exceeded the timeout of 300 seconds.

I can see that the issue is that there is a time-out, and I can resolve the issue by setting the COMPOSER_PROCESS_TIMEOUT environment variable > 300 seconds. However, when I do not mount a volume the installation has no issue.

Environment Information

  • Windows 10 Enterprise 22H2 19045.2965
  • Docker version 24.0.2, build cb74dfc
  • Composer version 2.5.8 2023-06-09 17:13:21
Jaypan avatar
de flag
Most people use a distrubtion such as DDev or Lando, which utilizes Docker under the hood, but manages all the Drupal stuff for you. I personally use DDev.
id flag
Docker bind mounts can be really slow on Windows.
id flag
I recommend instead installing Composer on your computer. And DDEV.
id flag
Are you using WSL? https://stackoverflow.com/questions/65285379/docker-volume-mapping-windows-incredible-slow
Kevin avatar
in flag
The conventional wisdom is that you should use WSL2 to obtain the Linux distro, but do everything from inside the Linux box itself and avoid bind mounts. It is a night and day difference.
Nathan Healea avatar
hu flag
@Kevin I'm going to try to switch to the WSL2 instance and see if that works better. From my testing, it does seem to be a mounting issue. Hopefully I will have an update latter today.
id flag
And just to be clear, the most straightforward way to run Composer is to just install it on your computer.
Nathan Healea avatar
hu flag
I'm on a Windows machine, so their php cannot be installed. Therefore I have to use a different solution. What I find interesting is that Composer does have a Windows installation, but it requires a PHP path of course. So unless I'm missing something I have not found a way to do that. Unless I install composer through WSL.
id flag
I don't know what you mean about not being able to install PHP on Windows. PHP.net distributes official Windows builds.
mangohost

Post an answer

Most people don’t grasp that asking a lot of questions unlocks learning and improves interpersonal bonding. In Alison’s studies, for example, though people could accurately recall how many questions had been asked in their conversations, they didn’t intuit the link between questions and liking. Across four studies, in which participants were engaged in conversations themselves or read transcripts of others’ conversations, people tended not to realize that question asking would influence—or had influenced—the level of amity between the conversationalists.