Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to add php gd extension to Dockerfile

I'm getting this error when trying to deploy using alpine:

phpoffice/phpspreadsheet 1.2.1 requires ext-gd * -> the requested PHP extension gd is missing from your system.

Here's my Dockerfile:

FROM php:7.2-alpine

RUN apk update
RUN apk add zlib-dev gd php7-gd
RUN docker-php-ext-install sockets pdo_mysql zip
RUN apk add --no-cache libpng libpng-dev && docker-php-ext-install gd

The error is an output from a jenkins run. I think it's failing somewhere around here...

build:
    docker run --rm --tty --user $$(id -u):$$(id -g) \
        --volume "$$(pwd)":/app \
        --volume "$$(pwd)/ops/jenkins/github.token":/tmp/auth.json \
        --volume "$$(pwd)/ops/jenkins/composer_trust_github.com":/root/.ssh/config \
        composer install --no-dev
    rm -rf ops/docker/app.tar.gz
    tar -czvf ops/docker/app.tar.gz -X ops/jenkins/build_excludes .

docker run --rm --tty --user $(id -u):$(id -g) \
    --volume "$(pwd)":/app \
    --volume "$(pwd)/ops/jenkins/github.token":/tmp/auth.json \
    --volume "$(pwd)/ops/jenkins/composer_trust_github.com":/root/.ssh/config \
    --volume "$(pwd)/ops/jenkins/php/php.ini":/usr/local/etc/php/php.ini \
    composer install --no-dev
[32mLoading composer repositories with package information[39m
[32mInstalling dependencies from lock file[39m
[37;41mYour requirements could not be resolved to an installable set of packages.[39;49m

  Problem 1
    - Installation request for phpoffice/phpspreadsheet 1.2.1 -> satisfiable by phpoffice/phpspreadsheet[1.2.1].
    - phpoffice/phpspreadsheet 1.2.1 requires ext-gd * -> the requested PHP extension gd is missing from your system.

How do I correctly add ext-gd?


UPDATE: More information

The commands of the Makefile which Jenkins calls in order are as follows:

prepare:
    git clone [email protected]:xxx/go-php-sqs-consumer
    cd go-php-sqs-consumer && glide install
    docker run --rm -v "${PWD}/go-php-sqs-consumer":/go/src/app -w /go/src/app golang:1.8.1-alpine go build -o consumer
    mv go-php-sqs-consumer/consumer ops/docker/consumer
    rm -rf go-php-sqs-consumer

build:
    echo "{\"github-oauth\":{\"github.com\":\"$$(credstash get github.tech-craft.jenkins-eu-west-1)\"}}" > ops/jenkins/github.token
    docker run --rm --tty --user $$(id -u):$$(id -g) \
        --volume "$$(pwd)":/app \
        --volume "$$(pwd)/ops/jenkins/github.token":/tmp/auth.json \
        --volume "$$(pwd)/ops/jenkins/composer_trust_github.com":/root/.ssh/config \
        composer install --no-dev
    rm -rf ops/docker/app.tar.gz
    ansible-vault decrypt config.*.json && chmod a+r config.*.json
    tar -czvf ops/docker/app.tar.gz -X ops/jenkins/build_excludes .

archive:
    aws s3api put-object --bucket craft-build --key "auth-api/${s3_key_version}.tar.gz" --body "ops/docker/app.tar.gz"
    aws s3api put-object --bucket craft-build --key "auth-api/current.tar.gz" --body "ops/docker/app.tar.gz"

containerise:
    cd ops/docker && docker build --pull --no-cache -t application-exporter-service .
like image 353
mikelovelyuk Avatar asked Apr 24 '18 10:04

mikelovelyuk


People also ask

How to install PHP extensions in Docker file?

To Install PHP Extensions in your Docker File follow the following steps: Step 1: At first, the terminal in the docker file should be opened. The following command should be run. It will enable the bash for writing commands in PHP. It will take some to enable it. Step 2: Then the following command should be used.

Do you need to install PHP GD extension?

Do you need to install PHP GD Extension? Don't worry I got you. In this post, I will share with you how to install PHP GD Extension in your windows. This extension is important if you have the functionality to create and manipulate images in PHP. Kindly follow the simple steps below.

How to install GD extension in Apache?

We run the below command to install a gd extension. yum install php-gd. 2. Then, we restart the apache as follows. service httpd restart. That’s it!. Here we have installed the gd library. Similarly, adding GD library support involves executing the command: sudo apt-get install php7.0-gd.

Is it possible to install a dockerfile locally?

Just created Dockerfile locally (exactly as yours) and added composer to it. phpoffice/phpspreadsheet installs without any issues. See my update.


2 Answers

Here's how I do it but on php image, not alpine. Maybe you can just "finetune" it to work on alpine:

RUN apt-get update && \
    apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libpng12-dev && \
    docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ && \
    docker-php-ext-install gd
like image 57
Izydorr Avatar answered Oct 22 '22 21:10

Izydorr


It's help for me:

RUN apk update

RUN apk add libpng libpng-dev libjpeg-turbo-dev libwebp-dev zlib-dev libxpm-dev gd && docker-php-ext-install gd
like image 44
Diamon Avatar answered Oct 22 '22 20:10

Diamon