I’m trying to install some PHP extensions when building a php-apache image. Here’s the ./php/Dockerfile
:
FROM php:8.0-apache RUN docker-php-ext-install bcmath && docker-php-ext-enable bcmath docker-php-ext-install calendar && docker-php-ext-enable calendar docker-php-ext-install gd && docker-php-ext-enable gd docker-php-ext-install mcrypt && docker-php-ext-enable mcrypt docker-php-ext-install pdo_mysql && docker-php-ext-enable pdo_mysql docker-php-ext-install mysqli && docker-php-ext-enable mysqli docker-php-ext-install soap && docker-php-ext-enable soap docker-php-ext-install sockets && docker-php-ext-enable sockets docker-php-ext-install exif && docker-php-ext-enable exif docker-php-ext-install wddx && docker-php-ext-enable wddx docker-php-ext-install wmlrpc && docker-php-ext-enable wmlrpc docker-php-ext-install zip && docker-php-ext-enable zip RUN apt-get update && apt-get upgrade -y
And here’s the docker-compose.yml
:
version: '3.8' services: php-apache-environment: container_name: php-apache build: context: ./php dockerfile: Dockerfile depends_on: - db volumes: - ./php/src:/var/www/html/ ports: - 80:80 db: container_name: db image: mysql restart: always environment: MYSQL_ROOT_PASSWORD: MYSQL_ROOT_PASSWORD MYSQL_DATABASE: MYSQL_DATABASE MYSQL_USER: MYSQL_USER MYSQL_PASSWORD: MYSQL_PASSWORD ports: - "9906:3306"
And when I run docker-compose up -d
, this is the error given to me:
error: 'docker-php-ext-install' does not exist usage: /usr/local/bin/docker-php-ext-enable [options] module-name [module-name ...] ie: /usr/local/bin/docker-php-ext-enable gd mysqli /usr/local/bin/docker-php-ext-enable pdo pdo_mysql /usr/local/bin/docker-php-ext-enable --ini-name 0-apc.ini apcu apc Possible values for module-name: bcmath.so opcache.so sodium.so Some of the above modules are already compiled into PHP; please check the output of "php -i" to see which modules are already loaded. The command '/bin/sh -c docker-php-ext-install bcmath && docker-php-ext-enable bcmath docker-php-ext-install calendar && docker-php-ext-enable calendar docker-php-ext-install gd && docker-php-ext-enable gd docker-php-ext-install mcrypt && docker-php-ext-enable mcrypt docker-php-ext-install pdo_mysql && docker-php-ext-enable pdo_mysql docker-php-ext-install mysqli && docker-php-ext-enable mysqli docker-php-ext-install soap && docker-php-ext-enable soap docker-php-ext-install sockets && docker-php-ext-enable sockets docker-php-ext-install exif && docker-php-ext-enable exif docker-php-ext-install wddx && docker-php-ext-enable wddx docker-php-ext-install wmlrpc && docker-php-ext-enable wmlrpc docker-php-ext-install zip && docker-php-ext-enable zip' returned a non-zero code: 1 ERROR: Service 'php-apache-environment' failed to build : Build failed
What is wrong in here?
I tried to use all absolute paths like this:
RUN /usr/local/bin/docker-php-ext-install calendar && /usr/local/bin/docker-php-ext-enable calendar
But then it gives me errors like these:
error: 'calendar' does not exist error: 'gd' does not exist error: 'mcrypt' does not exist
Not sure what I’m doing wrong here?
Advertisement
Answer
You are missing &&
at the end of each line of the long RUN
command in the Dockerfile, before .
FROM php:8.0-apache RUN docker-php-ext-install bcmath && docker-php-ext-enable bcmath && docker-php-ext-install calendar && docker-php-ext-enable calendar && docker-php-ext-install gd && docker-php-ext-enable gd && docker-php-ext-install mcrypt && docker-php-ext-enable mcrypt && docker-php-ext-install pdo_mysql && docker-php-ext-enable pdo_mysql && docker-php-ext-install mysqli && docker-php-ext-enable mysqli && docker-php-ext-install soap && docker-php-ext-enable soap && docker-php-ext-install sockets && docker-php-ext-enable sockets && docker-php-ext-install exif && docker-php-ext-enable exif && docker-php-ext-install wddx && docker-php-ext-enable wddx && docker-php-ext-install wmlrpc && docker-php-ext-enable wmlrpc && docker-php-ext-install zip && docker-php-ext-enable zip RUN apt-get update && apt-get upgrade -y
Also, extensions should be enabled by default, there is no need to run docker-php-ext-enable
, at least with the PHP-FPM images.
One more thing, even with these modifications, your build will likely fail because of missing dependencies and/or unknown extensions (if some are already in the base image).
For instance, gd
will need zlib
, so you must install these dependencies before installing the extensions (apt update && apt install -y ...
).