J'ai un problème avec Docker (docker-compose). Je souhaite installer des extensions PHP utilisant docker-compose.yml
, mais je ne suis pas en mesure de le faire, car mon .yml a FROM ubuntu
et pas FROM php
. Existe-t-il un moyen d'atteindre ou d'accéder à 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
Vous devez créer un nouveau Dockerfile pour un service spécifique, dans ce cas 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
Et puis lien vers lui dans votre docker-compose.yml
fichier, comme ceci:
services:
// other services
php:
build: ./php
ports:
- "9000:9000"
volumes:
- .:/dogopic
links:
- mariadb
Veuillez regarder le paramètre build
- il pointe vers le répertoire dans lequel se trouve ce nouveau Dockerfile.
J'ai contourné le problème. J'ai compris que je pouvais toujours exécuter ce docker-php-ext-install
script utilisant la commande suivante:
docker-compose exec <your-php-container> docker-php-ext-install pdo pdo_mysql mbstring
Et en raison de la commodité, j'ai créé ce fichier batch simple pour simplifier la composition des conteneurs en une seule commande: ./docker.bat
@ECHO OFF
docker-compose build
docker-compose exec php docker-php-ext-install pdo pdo_mysql mbstring
docker-compose up
docker-php-ext-install
n'est pas une fonctionnalité native de docker. Si vous lisez attentivement php docker hub page, vous verrez que ce n'est qu'un script fourni pour faciliter le processus d'installation:
Nous fournissons les scripts d'aide
docker-php-ext-configure
,docker-php-ext-install
, etdocker-php-ext-enable
pour installer plus facilement PHP.
Si votre image est basée sur ubuntu
, et non php
, vous pourriez trouver docker-php-ext-install
, par exemple, sur github .
Mais puisque votre Dockerfile
est FROM ubuntu
, Je vous conseille d'installer php avec 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
N'oubliez pas de configurer nginx
pour utiliser php-fpm. Pour ce faire, j'utilise personnellement un start.sh
script, qui démarre php-fpm
et nginx
dans le conteneur:
php-fpm -D
nginx -g "daemon off;"
Et dans le Dockerfile
je lance le script. pas nginx
:
COPY start.sh /tmp/start.sh
CMD ["/tmp/start.sh"]