Tengo un proyecto dentro de un contenedor y estoy tratando de usar gd lib para crear imágenes.
Hago dentro del bash del contenedor este command:
apt-get install php5-gd
Nada cambia después de reiniciar y ejecutar php -m
¿Que debería hacer?
Editar:
Agregué a mi file Docker:
RUN apt-get -qq update && apt-get -qq install libpng-dev RUN docker-php-ext-install gd
Ejecuto docker build -t [nombre]
Pero cuando ejecuto el bash y php -m
: php -m
[PHP Modules] Core ctype curl date dom ereg fileinfo filter ftp hash iconv json libxml mbstring mysql mysqli mysqlnd openssl pcntl pcre PDO pdo_mysql pdo_sqlite Phar posix readline Reflection session SimpleXML SPL sqlite3 standard tokenizer xml xmlreader xmlwriter zip zlib
No instale gd manualmente. docker-php-ext-install
la docker-php-ext-install
para eso.
Dentro del file docker, agregue:
RUN docker-php-ext-install gd
Hay un poco de molestia con docker-php-ext-install
que tiene que averiguar de forma manual qué dependencies necesitará. No se resuelven automáticamente. Debido a esto, el command se bloqueará por sí mismo, con:
configure: error: png.h not found.
Si busca el error, se dará count de que necesita libpng-dev
.
Por lo tanto, finalmente, todo el Dockerfile
debería verse de la siguiente manera:
FROM php:5.6-cli RUN apt-get -qq update && apt-get -qq install libpng-dev RUN docker-php-ext-install gd > /dev/null
docker-php-ext-install es un poco detallado en su salida, por lo tanto, me gusta canalizar su salida a /dev/null
. Los errores y advertencias seguirán imprimiéndose.
Puede verificar que la image tenga la extensión adecuada ejecutando la image:
docker build -t php-gd . docker run php-gd /bin/bash -c "php -m | grep gd"
Se imprimirá:
gd
Lo mismo dentro de una stack de comstackdor de docker:
docker-compose.yml
:
gd-example: build: . tty: true docker-compose up --build -d docker ps // to find container's name. You may also set in the config docker exec -it docker_gd-example_1 php -m | grep gd
Dos notas al margen:
De su pregunta no estaba claro si construyó su contenedor y luego ejecuta apt-get install php5-gd
desde allí. Si es así, entonces solo instalaría php5-gd dentro de ese contenedor y cada vez que lo vuelva a crear, desaparecerá. Siempre agregue cosas a un contenedor desde Dockerfile
.
Prueba php:7.1-cli
. ¿Realmente necesitas soportar php 5.6? 😉