web-dev-qa-db-fra.com

Installer Gd dans Docker

Je suis un novice complet de Docker, mais je dois maintenir un système existant. Le Dockerfile que j'utilise est comme ci-dessous:

FROM php:5.6-Apache

RUN docker-php-ext-install mysql mysqli

RUN apt-get update -y && apt-get install -y sendmail

RUN apt-get update && \
    apt-get install -y \
        zlib1g-dev 

RUN docker-php-ext-install mbstring

RUN docker-php-ext-install Zip

RUN docker-php-ext-install Gd

Quand je lance 'docker build [nom du site]', tout semble aller jusqu'à ce que j'obtienne l'erreur:

configure: error: png.h not found.
The command '/bin/sh -c docker-php-ext-install Gd' returned a non-zero code: 1

Quelle est la cause de cette erreur?

37
evilscary

Vous devriez ajouter le libpng-dev package à votre Dockerfile:

FROM php:5.6-Apache

RUN docker-php-ext-install mysql mysqli

RUN apt-get update -y && apt-get install -y sendmail libpng-dev

RUN apt-get update && \
    apt-get install -y \
        zlib1g-dev 

RUN docker-php-ext-install mbstring

RUN docker-php-ext-install Zip

RUN docker-php-ext-install Gd

Ensuite, allez dans le répertoire avec Dockerfile et exécutez:

docker build -t sitename .

Cela a fonctionné dans mon cas:

Removing intermediate container f03522715567
Successfully built 9d69212196a2

Faites-moi savoir si vous obtenez des erreurs.

EDIT:

Vous devriez voir quelque chose comme ça:

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
sitename            latest              9d69212196a2        19 minutes ago      414 MB
<none>              <none>              b6c69576a359        25 minutes ago      412.3 MB

EDIT2:

Juste pour vérifier tout:

S'il vous plaît lancer le docker build commande de cette façon:

docker build -t sitename:1.0 .

(ajouter :1.0 ne devrait rien changer, je l’ai ajouté juste pour avoir une ligne supplémentaire dans docker images _ sortie)

Puis démarrez le conteneur:

docker run --name sitename_test -p 80:80 sitename:1.0

Il devrait fonctionner parfaitement.

J'ai supposé qu'Apache utilise le port standard (80) - vous devrez peut-être régler cela. Si vous avez d'autres services/conteneurs à l'écoute sur le port 80, vous pouvez faire en sorte que votre conteneur écoute sur un autre port:

docker run --name sitename_test -p 8080:80 sitename:1.0

Cela redirigera le trafic du port 8080 vers le port 80 "à l'intérieur" du conteneur.

Normalement, vous exécutez un conteneur en arrière-plan. Pour ce faire, ajoutez le -d option à la docker run commande (mais à des fins de test, vous pouvez omettre -d pour voir la sortie dans la console).

Si vous décidez d’exécuter un conteneur en arrière-plan, vous pouvez vérifier les journaux à l’aide de docker logs sitename_test. Pour suivre les journaux (et voir les mises à jour dans les journaux), utilisez -f option:

docker logs -f sitename_test

J'espère que ça t'as aidé.

88
lmtx

Ce Dockerfile fonctionnait avec Php7 https://hub.docker.com/r/giapnh/php7-Gd

FROM php:7-fpm

RUN docker-php-ext-install mysqli pdo pdo_mysql
RUN apt-get update -y && apt-get install -y libwebp-dev libjpeg62-turbo-dev libpng-dev libxpm-dev \
    libfreetype6-dev
RUN apt-get update && \
    apt-get install -y \
        zlib1g-dev 

RUN docker-php-ext-install mbstring

RUN apt-get install -y libzip-dev
RUN docker-php-ext-install Zip

RUN docker-php-ext-configure Gd --with-Gd --with-webp-dir --with-jpeg-dir \
    --with-png-dir --with-zlib-dir --with-xpm-dir --with-freetype-dir \
    --enable-Gd-native-ttf

RUN docker-php-ext-install Gd

CMD ["php-fpm"]

EXPOSE 9000
2
NguyenHuuGiap

Malheureusement, certaines extensions php ont des dépendances par rapport à d'autres programmes. Il y a un projet appelé docker-php-extension-installer que vous pouvez utiliser pour installer PHP extensions. Il s'assurera que les dépendances requises sont également présentes.

Étant donné que j'ai besoin de ce script externe dans plusieurs conteneurs, je l'ai mis dans n script partagé que j'inclus ensuite dans le fichier Dockerfile requis.

Script (à .shared/scripts/install_php_extensions.sh)

#!/bin/sh

# add wget
apt-get update -yqq && apt-get -f install -yyq wget

# download helper script
wget -q -O /usr/local/bin/install-php-extensions https://raw.githubusercontent.com/mlocati/docker-php-extension-installer/master/install-php-extensions \
    || (echo "Failed while downloading php extension installer!"; exit 1)

# install all required extensions
chmod uga+x /usr/local/bin/install-php-extensions && sync && install-php-extensions \
    Gd \
;

Dockerfile

# get the scripts from the build context and make sure they are executable
COPY .shared/scripts/ /tmp/scripts/
RUN chmod +x -R /tmp/scripts/

# install extensions
RUN /tmp/scripts/install_php_extensions.sh

Attention: Assurez-vous d'utiliser le bon contexte de construction dans ce cas.

1
Hirnhamster