如何使用Composer和Docker处理缺少的依赖项?

问题描述

我有一个要安装在Docker笔记本电脑上进行本地开发的应用程序。该应用程序需要composer中的库。

为了避免运行作曲家,我想避免在笔记本电脑和所有必要的扩展程序上安装PHP。

我也不想在我的应用程序容器内部进行构建时运行composer,因为我需要使用装载绑定将本地计算机上的vendor文件夹。

对于here所述,通过docker容器安装composer似乎是我的理想解决方案:

docker run --rm --interactive --tty \
  --volume $PWD:/app \
  composer install 

但是,这样做时,如何解决任何PHP依赖项冲突?

例如

docker run --rm --interactive --tty \
       --volume $PWD:/app \
       composer require phpoffice/phpspreadsheet

将失败

Using version ^1.14 for phpoffice/phpspreadsheet
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - phpoffice/phpspreadsheet 1.14.1 requires ext-gd * -> the requested PHP extension gd is missing from your system.
    - phpoffice/phpspreadsheet 1.14.0 requires ext-gd * -> the requested PHP extension gd is missing from your system.
    - Installation request for phpoffice/phpspreadsheet ^1.14 -> satisfiable by phpoffice/phpspreadsheet[1.14.0,1.14.1].

我该如何解决这类问题?

解决方法

当您运行installupdaterequire命令的环境与您要执行代码的环境不同时,并且如果您完全确定这些实际运行代码时将满足依赖项,您无需在安装过程中检查它们。

只需使用--ignore-platform-reqsdocs)。

在为此类项目创建映像时,我通常放在Dockerfile中的内容是这样的,这是最低要求:

composer install --ignore-platform-reqs --prefer-dist

如果正在准备生产人工制品,整个过程将是这样:

composer install --ignore-platform-reqs --prefer-dist --no-scripts \
 --no-progress --no-suggest --no-interaction --no-dev --no-autoloader

在这种情况下,还需要执行几个其他步骤来转储-自动加载和执行安装后脚本。

您不会在此之后详述如何计划运行此安装的结果,因此我不确定这部分与您是否相关。

注意:这并不是特别依赖于“ docker”。与在运行计划中进行的安装不同,该策略将在您在其他计算机上创建安装时适用。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...