Tengo un problema con Docker (docker-compose). Quiero instalar algunas extensiones de PHP usando docker-compose.yml , pero no puedo hacerlo porque mi .yml tiene FROM ubuntu y no FROM php . ¿Hay alguna forma en que pueda lograr o acceder a docker-php-ext-install ?
FROM ubuntu:16.04 RUN apt -yqq update RUN apt -yqq install nginx iputils-ping RUN docker-php-ext-install pdo pdo_mysql mbstring WORKDIR /usr/local/src COPY docker/nginx/dev.conf /etc/nginx/conf.d/dev.conf COPY docker/nginx/nginx.conf /etc/nginx/nginx.conf CMD ["nginx"] version: "2" services: mariadb: image: mariadb environment: - MYSQL_ALLOW_EMPTY_PASSWORD=1 - MYSQL_ROOT_PASSWORD= phpmyadmin: image: phpmyadmin/phpmyadmin ports: - "8080:80" restart: always environment: - PMA_HOST=mariadb links: - mariadb php: image: php:7.1.1-fpm ports: - "9000:9000" volumes: - .:/dogopic links: - mariadb nginx: build: . ports: - "8000:80" volumes: - .:/dogopic links: - php Step 5/9 : RUN docker-php-ext-install pdo pdo_mysql mbstring ---> Running in 445f8c82883d /bin/sh: 1: docker-php-ext-install: not found Debe crear un nuevo Dockerfile para un servicio específico, en este caso php :
php/Dockerfile FROM php:7.1.1-fpm RUN apt -yqq update RUN apt -yqq install libxml2-dev RUN docker-php-ext-install pdo_mysql RUN docker-php-ext-install xml Y luego vincúlelo en su archivo docker-compose.yml , así:
services: // other services php: build: ./php ports: - "9000:9000" volumes: - .:/dogopic links: - mariadb Mire el parámetro de build : apunta al directorio en el que se encuentra ese nuevo Dockerfile.
Caminé alrededor del problema. Descubrí que todavía puedo ejecutar este script docker-php-ext-install usando el siguiente comando:
docker-compose exec <your-php-container> docker-php-ext-install pdo pdo_mysql mbstring Y debido a la conveniencia, he creado este archivo por lotes simple para simplificar la composición de contenedores con solo un comando: ./docker.bat
@ECHO OFF docker-compose build docker-compose exec php docker-php-ext-install pdo pdo_mysql mbstring docker-compose updocker-php-ext-install no es una funcionalidad nativa de docker. Si lee atentamente la página de php docker hub , verá que es solo un script proporcionado para facilitar el proceso de instalación:
Proporcionamos los scripts auxiliares
docker-php-ext-configure,docker-php-ext-installydocker-php-ext-enablepara instalar extensiones de PHP más fácilmente.
Si su imagen se basa en ubuntu , no en php , puede encontrar docker-php-ext-install , por ejemplo, engithub .
Pero dado que su Dockerfile es FROM ubuntu , le aconsejo que instale php con apt-get :
FROM ubuntu:16.04 RUN apt -yqq update RUN apt -yqq install nginx iputils-ping RUN apt-get install -y php php-fpm pdo-mysql php-mbstring No olvide configurar nginx para usar php-fpm. Para hacerlo, personalmente uso un script start.sh , que inicia php-fpm y nginx en el contenedor:
php-fpm -D nginx -g "daemon off;" Y en el Dockerfile ejecuto el script. no nginx :
COPY start.sh /tmp/start.sh CMD ["/tmp/start.sh"]