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

9vw9lbht  于 2023-05-16  发布在  PHP
关注(0)|答案(2)|浏览(177)

我正在学习Docker,并使用了两周。现在我有一个非常简单的任务,通过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

但在我看来,这是一个肮脏的工作环境, composer 不能验证我的平台。除了在我的Dockerfile中下载composer并且不重用现有容器之外,还有什么干净的解决方案吗?

nhhxz33t

nhhxz33t1#

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

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

sc4hvdpw2#

你需要PHP + PHP扩展+ composer 在同一个(!)container = DevContainer。
只需使用提供的命令here安装Composer。

相关问题