我有一个要安装在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].
我该如何解决这类问题?
答案 0 :(得分:2)
当您运行install
,update
或require
命令的环境与您要执行代码的环境不同时,并且如果您完全确定这些实际运行代码时将满足依赖项,您无需在安装过程中检查它们。
只需使用--ignore-platform-reqs
(docs)。
在为此类项目创建映像时,我通常放在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”。与在运行计划中进行的安装不同,该策略将在您在其他计算机上创建安装时适用。