如何在Docker部署的Google Cloud Run环境中安装PHP GD扩展
问题原因
报错的核心原因是替换基础镜像时出现了环境不匹配:
- 原可运行配置使用的
php:7.3-apache-stretch是内置Apache服务的PHP镜像,自带a2enmod、Apache配置文件等相关组件 - 修改后使用的
php:7.4-fpm是仅包含PHP-FPM进程的镜像,没有内置Apache服务,所以执行Apache专属的a2enmod命令时会抛出“命令不存在”的错误,退出码127就是Linux系统找不到指定命令的标准返回值。
解决方法
推荐直接使用带Apache的7.4版本PHP镜像,在原有配置逻辑上添加GD扩展的安装即可,完整可用的Dockerfile如下:
FROM composer:2.1.6 as build WORKDIR /app COPY . /app RUN composer install FROM php:7.4-apache-stretch # 安装GD扩展依赖和GD本身 RUN apt-get update && apt-get install -y \ libfreetype6-dev \ libjpeg62-turbo-dev \ libpng-dev \ && docker-php-ext-configure gd --with-freetype --with-jpeg \ && docker-php-ext-install -j$(nproc) gd pdo pdo_mysql \ # 清理apt缓存缩小镜像体积 && rm -rf /var/lib/apt/lists/* EXPOSE 8080 COPY --from=build /app /var/www/ COPY docker/000-default.conf /etc/apache2/sites-available/000-default.conf COPY .env.example /var/www/.env RUN chmod 777 -R /var/www/storage/ && \ echo "Listen 8080" >> /etc/apache2/ports.conf && \ chown -R www-data:www-data /var/www/ && \ a2enmod rewrite
如果确实需要使用FPM模式,需要额外在镜像中安装配置Nginx或Apache作为Web服务器,替换原有所有Apache相关的配置逻辑,改动成本较高,不建议对原有架构做大幅调整。
内容的提问来源于stack exchange,提问作者ino
相关产品推荐
相关产品推荐

