php - 带有Laravel的Docker因php扩展而失败

标签 php laravel docker

Laravel服务器上运行appache
在使用docker-compose up --build和以下Dockerfile构建图像时

FROM php:7.3-apache-stretch
RUN apt-get update -y && apt-get install -y libpng-dev
RUN docker-php-ext-install pdo pdo_mysql gd

FROM composer:1.9.0 as build
WORKDIR /app
COPY . /app
RUN composer global require hirak/prestissimo && composer install
我收到错误消息:
phpoffice/phpspreadsheet 1.13.0 requires ext-gd * -> the requested PHP extension gd is missing from your system.
composer install命令运行时,会发生这种情况。
如您所见,我实际上是从php安装gd,因此它不应给我此错误消息。
您知道我该如何解决吗?
谢谢!

最佳答案

之所以会这样,是因为您使用的是多阶段构建,而您的composer第二阶段与以前使用PHP容器进行的构建无关。具有多阶段的主要用例是产生一些有用的伪像,这些伪像可在以后使用。
因此,我建议您从composer图像复制 Composer 文件,然后将其放置在php容器中的某个位置。
我会给您我的解决方案,它与 laravel / symfony 等一起非常适合我。

FROM php:7.4.4-fpm

# We copy composer from it's original image to our php container to use it later.
COPY --from=composer:1.9 /usr/bin/composer /usr/bin/composer

WORKDIR /var/www

ARG USER_ID

RUN useradd -s /bin/bash -d /home/user/ -m -G sudo,www-data user -u $USER_ID

RUN apt update && apt install -y zip unzip wget zlib1g-dev libicu-dev

RUN docker-php-ext-install pdo_mysql intl opcache gd

USER user

RUN wget https://get.symfony.com/cli/installer -O - | bash

ENV PATH="/home/user/.symfony/bin:${PATH}"

COPY php.ini /usr/local/etc/php

# You can also run here composer install, depends on your use case

关于php - 带有Laravel的Docker因php扩展而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63326609/

相关文章:

php - ci url 是否可能不适用于 index.php

docker - 在 docker build 期间设置 DNS 选项

php - 使用 preg_replace 将字符串转换为 <img> 标签

php - Laravel multiauth md5 和主键字符串

laravel - 如何使用 Laravel Homestead 运行 post-vagrant-up 脚本

javascript - 如何将 Laravel foreach 放入 JS 文件中?

node.js - 我正在使用 Docker Compose 运行 2 个镜像,并且无法从我的 Mac 访问本地主机。我正在暴露端口 3000。我错过了什么吗?

docker - 在Mesos/Marathon中设置默认的 `docker run`参数

php - 测试 PHP 脚本的 MySQL 用户的权限

javascript - 增加 ReCaptcha 过期时间?