如何在基于php:7.2-alpine3.7的Docker容器中安装PHP扩展
Hey there! Since you're working with the php:7.2-alpine3.7 Docker image, installing PHP extensions has a few quirks compared to Debian/Ubuntu-based PHP images—mostly because Alpine uses the apk package manager and is stripped down by default. Let’s walk through the most common methods to get your extensions up and running:
apk Alpine’s official repositories have a bunch of PHP 7.2 extensions pre-built as packages, named in the format php7-<extension-name>. This is the fastest and cleanest method when available.
Here’s an example Dockerfile snippet:
FROM php:7.2-alpine3.7 # Update repo index and install common extensions RUN apk add --no-cache \ php7-mysqli \ php7-gd \ php7-curl \ php7-json # Clean up apk cache to reduce image size (optional but recommended) RUN rm -rf /var/cache/apk/*
To see all available PHP 7.2 extensions in Alpine’s repos, you can run this command inside a running container:
apk search php7-
pecl (for non-prepackaged extensions) Some extensions like Redis or Xdebug aren’t available as apk packages for this specific image version. For these, use pecl—but you’ll first need to install build dependencies since Alpine doesn’t include them by default.
Pro tip: Use a virtual dependency group (.build-deps) to easily clean up build tools after installation, keeping your image lightweight.
Example for Redis and Xdebug:
FROM php:7.2-alpine3.7 # Install build dependencies (grouped as .build-deps) RUN apk add --no-cache --virtual .build-deps \ gcc \ make \ php7-dev \ autoconf \ libzip-dev # Install specific versions of extensions (critical for PHP 7.2 compatibility) RUN pecl install redis-4.3.0 xdebug-2.6.1 \ # Use the official Docker script to enable extensions && docker-php-ext-enable redis xdebug # Delete build dependencies and clean up RUN apk del .build-deps \ && rm -rf /var/cache/apk/* \ && rm -rf /tmp/pear
Note: Always verify extension version compatibility with PHP 7.2. For example, Xdebug 3+ doesn’t support PHP 7.2, so we stick to 2.6.x here.
If an extension isn’t available via apk or pecl, you’ll need to compile it from source. This follows the standard PHP extension build workflow with phpize and configure.
Example for a custom extension:
FROM php:7.2-alpine3.7 # Install build dependencies RUN apk add --no-cache --virtual .build-deps \ gcc \ make \ php7-dev \ git # Clone source, compile, and install RUN git clone https://github.com/your-custom-extension.git /tmp/custom-ext \ && cd /tmp/custom-ext \ && phpize \ && ./configure \ && make \ && make install \ # Enable the extension && docker-php-ext-enable custom-ext # Clean up build tools and source files RUN apk del .build-deps \ && rm -rf /tmp/custom-ext \ && rm -rf /var/cache/apk/*
docker-php-ext-install for core extensions The official PHP Docker images include helper scripts like docker-php-ext-install for core PHP extensions that require system library dependencies. For example, installing pdo_mysql:
FROM php:7.2-alpine3.7 # Install system dependency for pdo_mysql RUN apk add --no-cache mysql-dev \ # Use the helper script to install and enable the extension && docker-php-ext-install pdo_mysql \ && rm -rf /var/cache/apk/*
内容的提问来源于stack exchange,提问作者Zenzamy Othmane

