You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker PHP Alpine环境:如何让Apache使用已安装的PHP

解决Apache使用Docker CLI版PHP的问题

核心问题:你使用的php:8.3.16-cli-alpine3.20是CLI专用版本的PHP,本身不包含Apache所需的PHP模块(libphp.so)。安装php$phpverx-apache2会从Alpine仓库拉取一套全新的PHP环境,直接覆盖你之前安装了扩展的PHP,导致版本冲突。

下面提供两种解决方案,优先推荐第一种:

方案一:改用官方Apache集成版PHP镜像(最省心)

官方已经提供了预集成Apache和PHP模块的镜像,直接基于它构建即可,完全避免版本覆盖问题:

FROM php:8.3.16-apache-alpine3.20

# 安装扩展安装脚本
ADD --chmod=0755 https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/
RUN install-php-extensions gd redis intl protobuf mysqli

# 复制你的Apache配置文件
COPY ./default.conf /etc/apache2/httpd.conf

# 复制项目代码到Apache默认目录(根据你的项目调整路径)
# COPY ./your-project/ /var/www/html/

这个镜像已经配置好了Apache和PHP的关联,无需手动加载模块,直接部署项目即可。

方案二:在CLI镜像中手动编译Apache的PHP模块(复杂,不推荐)

如果一定要基于CLI镜像改造,需要手动编译libphp.so模块,步骤如下:

  1. 安装编译依赖:
RUN apk add --no-cache apache2 apache2-dev gcc g++ make autoconf libtool pkgconfig
  1. 下载对应版本的PHP源码并编译mod_php:
# 下载与当前PHP版本完全一致的源码包
RUN wget https://www.php.net/distributions/php-8.3.16.tar.gz -O php.tar.gz \
    && mkdir -p php-src \
    && tar -xf php.tar.gz -C php-src --strip-components=1 \
    && rm php.tar.gz

# 编译并安装Apache PHP模块
RUN cd php-src \
    && ./configure --with-apxs2=/usr/bin/apxs \
    && make -j$(nproc) \
    && make install-modules

# 清理编译依赖和源码,减小镜像体积
RUN rm -rf php-src \
    && apk del gcc g++ make autoconf libtool pkgconfig
  1. 配置Apache加载模块:
    在你的default.conf中添加以下配置:
LoadModule php_module /usr/lib/apache2/modules/libphp.so
AddHandler php-script .php
DirectoryIndex index.php index.html

注意:这种方式必须保证源码版本与CLI PHP完全一致,否则会出现兼容性问题,且后续维护成本高,仅作为特殊场景下的备选方案。

内容的提问来源于stack exchange,提问作者Sabeex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 16:42:38