Docker 缺少 PHP 扩展的 Composer 安装(自己的容器)

问题描述 投票:0回答:2

我目前正在学习Docker,并使用它2周。现在我有一个非常简单的任务,通过 Composer 安装 PHP 库。这通常是在没有 Docker 的情况下工作:

composer install

现在因为我正在使用 Docker,我发现有一个 Docker 容器,它为我保存了 composer:

docker run --rm -v $(pwd):/app composer/composer install

这工作得很好,但是有一些库需要安装特定的 php 库,比如 bcmath,所以我将它添加到我的 Dockerfile

FROM php:7.0-apache
RUN docker-php-ext-install bcmath <-- added this line 
COPY . /var/www/html
WORKDIR /var/www/html
EXPOSE 80

当我重建容器时,此代码返回 true

var_dump(extension_loaded('bcmath'))

万岁! BCMath安装正确,但是composer不识别,因为库没有安装在composer容器中!

现在我可以通过使用忽略它

docker run --rm -v $(pwd):/app composer/composer install --ignore-platform-reqs

但在我看来,这是一个肮脏的解决方法,作曲家无法验证我的平台。除了在我的 Dockerfile 中下载 composer 并且不重用现有容器之外,是否有任何干净的解决方案?

php docker composer-php
2个回答
3
投票

您可以使用

platform
设置来模仿您的 PHP 容器配置。这将类似于
--ignore-platform-reqs
开关(它将使用 PHP 和在
composer.json
中配置的扩展,而不是来自当前 PHP 安装的真实信息),但它为您提供了更精细的控制。您可以说“我真的安装了
bcmath
,相信我”,而不是“忽略所有平台要求检查”。将检查所有其他要求,因此如果弹出新要求,您仍然会收到警告。

"config": {
    "platform": {
        "php": "7.1",
        "ext-bcmath": "*"
    }
},

-1
投票

您需要在同一个(!)容器 = DevContainer 中使用 PHP + PHP Extensions + Composer。

只需使用此处提供的命令安装 Composer.

© www.soinside.com 2019 - 2024. All rights reserved.