There are many excellent questions here about automating the initial setup process for Drupal but I haven't seen any pertaining specifically to Drupal containers in Docker.

Here's my setup. I've kept the images/builds as vanilla as possible; the only Dockerfile I have is for composer, inspired by the accepted answer to this question.


version: '2'

    image: drupal
      - 8888:80

    image: mariadb
       MYSQL_DATABASE: drupal8
       MYSQL_USER: drupal8
       MYSQL_PASSWORD: drupal8
       MYSQL_ROOT_PASSWORD: drupal8
    restart: always
      - drupal

    image: drush/drush

    image: composer
    build: composer_init
      - drupal
      - drush

Dockerfile for composer:

FROM composer

RUN composer -vvv create-project drupal-composer/drupal-project /var/www/html --stability dev --no-interaction
RUN cd /var/www/html
RUN drush si -y \
  --db-url=mysql://root:drupal8@localhost/drupal8 \
  --site-name=drupal8 \
  --site-mail=drupal8@foo.com \
  --account-mail=drupal8@foo.com \
  --account-name=drupal8 \
  --account-pass=drupal8 >> /dev/null 2>&1

I spun up the build process by issuing docker-compose up -d --build. Now when the process reached the composer part, it blew up with the following message:

Resolving dependencies through SAT
Dependency resolution completed in 0.001 seconds
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - drupal/core 8.5.x-dev requires ext-gd * -> the requested PHP extension gd is missing from your system.
    - drupal/core 8.5.1 requires ext-gd * -> the requested PHP extension gd is missing from your system.
    - Installation request for drupal/core ~8.5.1 -> satisfiable by drupal/core[8.5.1, 8.5.x-dev].

  To enable extensions, verify that they are enabled in your .ini files:
    - /usr/local/etc/php/conf.d/date_timezone.ini
    - /usr/local/etc/php/conf.d/docker-php-ext-sodium.ini
    - /usr/local/etc/php/conf.d/docker-php-ext-zip.ini
    - /usr/local/etc/php/conf.d/memory-limit.ini
  You can also run `php --ini` inside terminal to see which files are used by PHP in CLI mode.

Based on other answers/suggestions here, I added a Dockerfile to my drupal section and added RUN apt-get install php7.0-gd to the Dockerfile, but this now blows up with E: Package 'php7.0-gd' has no installation candidate.

I've ensured that the PHP version for this Docker image is PHP 7.

php --ini gives me:

# php --ini
Configuration File (php.ini) Path: /usr/local/etc/php
Loaded Configuration File:         (none)
Scan for additional .ini files in: /usr/local/etc/php/conf.d
Additional .ini files parsed:      /usr/local/etc/php/conf.d/docker-php-ext-gd.ini,

How can I resolve this error now?

  • 1
    Someone already automated everything, don't reinvent the wheel, use https://www.kalabox.io/ saves time & unnecessary headaches. – No Sssweat Apr 17 '18 at 17:19
  • Try apt-get install php-gd. After it installs you need to ensure that extension is loaded in the relevant files. – Kevin Apr 17 '18 at 17:22
  • @NoSssweat - I'm trying to stick to using only native Docker solutions without external tools – Craig Apr 17 '18 at 17:25
  • @Kevin apt-get install php-gd gives Unable to locate package php-gd too – Craig Apr 17 '18 at 17:26
  • Are you doing RUN apt-get update before doing any installs? – Kevin Apr 17 '18 at 17:31

I resolved this by removing the drush and composer services from the docker-compose file and updating my Dockerfile for drupal as follows:

FROM drupal

RUN apt-get update -y && apt-get install -y wget vim git mysql-client

RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" && \
    php composer-setup.php && \
    mv composer.phar /usr/local/bin/composer && \
    php -r "unlink('composer-setup.php');"

RUN wget -O drush.phar https://github.com/drush-ops/drush-launcher/releases/download/0.4.2/drush.phar && \
    chmod +x drush.phar && \
    mv drush.phar /usr/local/bin/drush
| improve this answer | |

It's much more easy to install composer in your Drupal-Dockerfile and install Drupal, drush and console from that composer.

You could extend my Dockerfile here https://hub.docker.com/r/feikede/drupal8-docker/ with a "drush si" and your done.

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.