web-dev-qa-db-fra.com

Ajouter PHP Extensions à l'aide de Docker Compose

J'essaie de configurer un environnement de développement local dans docker qui inclut nginx et php. J'ai commencé avec ce tutoriel et j'ai un serveur qui fonctionne. Mon projet nécessite l'installation de quelques extensions PHP PHP, mais j'ai du mal à trouver comment adapter cette configuration pour les inclure.

La documentation de l'image dit de la mettre dans un dockerfile, ce que j'ai fait. Cependant, cela me donne une erreur de:

ERREUR: le fichier de composition n'est pas valide car: le service php possède à la fois une image et un autre Dockerfile. Un service peut être construit pour l'image ou utiliser une image existante, pas les deux.

Ma docker-compose.yml:

web:
  image: nginx:latest
  ports:
    - "80:80"
  volumes:
  - ./code:/code
  - ./site.conf:/etc/nginx/conf.d/site.conf
  links:
    - php
php:
  dockerfile: extensions
  image: php:7-fpm
  volumes:
    - ./code:/code

Mon fichier extensions

RUN docker-php-ext-install Zip
RUN docker-php-ext-install Gd
RUN docker-php-ext-enable Zip
RUN docker-php-ext-enable Gd

De toute évidence, je me trompe. Existe-t-il un moyen d'installer les extensions dans cette image, ou dois-je créer la mienne? J'utilise Docker pour Windows.

7
Jacobm001

Dans votre fichier extensions, ajoutez ceci en haut: FROM php:7-fpm

et supprimez le image: php:7-fpm à partir de votre fichier docker-compose

3
JemoeE

c'est mon code. son déjà en cours d'exécution sur mon serveur.

web:
  image: nginx:latest
  ports:
    - "80:80"
  volumes:
  - ./code:/code
  - ./site.conf:/etc/nginx/conf.d/site.conf
  links:
    - php
php:
  #remove this
  #dockerfile: extensions
  #image: php:7-fpm
  #change with build ...
  build: './docker/php'
  volumes:
    - ./code:/code

Ensuite, ajoutez le fichier Dockerfile au docker/php dossier:

FROM php:7-fpm

RUN apt-get update && apt-get install -y \
        libicu-dev \
    && docker-php-ext-install \
        intl \
    && docker-php-ext-enable \
        intl

Vous pouvez maintenant exécuter Dockerfile dans docker-compose.

0
nur zazin