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?
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é.
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
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.