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

时间:2016-07-02 15:43:05

标签: php docker composer-php

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

composer install

既然我正在使用Docker,我发现有一个Docker容器,它正在为我提供作曲家:

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中下载作曲家而不重用现有的容器?

2 个答案:

答案 0 :(得分:0)

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

只需使用提供的here命令安装Composer。

答案 1 :(得分:0)

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

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