L'exécution de compositeur installer dans un Dockerfile

Je suis en train de Dockerize mon application laravel.
L'application est déjà construit et dans git, mais je .gitignore mon fournisseur dossier.
J'ai ajouté un Dockerfile, qui ressemble à ceci:

FROM php:7.1-fpm-alpine

RUN apk update && apk add curl && \
  curl -sS https://getcomposer.org/installer | php \
  && chmod +x composer.phar && mv composer.phar /usr/local/bin/composer

RUN apk --no-cache add --virtual .build-deps $PHPIZE_DEPS \
  && apk --no-cache add --virtual .ext-deps libmcrypt-dev freetype-dev \
  libjpeg-turbo-dev libpng-dev libxml2-dev msmtp bash openssl-dev pkgconfig \
  && docker-php-source extract \
  && docker-php-ext-configure gd --with-freetype-dir=/usr/include/\
                                   --with-png-dir=/usr/include/\
                                   --with-jpeg-dir=/usr/include/\
  && docker-php-ext-install gd mcrypt mysqli pdo pdo_mysql zip opcache \
  && pecl install mongodb redis xdebug \
  && docker-php-ext-enable mongodb \
  && docker-php-ext-enable redis \
  && docker-php-ext-enable xdebug \
  && docker-php-source delete \
  && apk del .build-deps

WORKDIR /var/www/html

COPY composer.json composer.lock ./
RUN composer install --no-scripts --no-autoloader

COPY . .
RUN chmod +x artisan

RUN composer dump-autoload --optimize && composer run-script post-install-cmd

CMD php artisan serve --host 0.0.0.0 --port 5001

Quand je build, cela semble fonctionner à merveille. Je vois les dépendances obtenir téléchargé, je vois le chargement automatique du fichier généré à la sortie. Cependant, une fois la construction terminée, le vendeur dossier n'est pas réellement là. Je suppose que c'était fait dans un conteneur intermédiaire qui est ensuite éliminé? Donc, quand je lance le panneau-composer jusqu', j'obtiens:
Erreur fatale: require(): Failed opening required '/var/www/html/bootstrap/../vendor/autoload.php'

Ce fil semble pointer à la question - peut-être - mais n'a pas vraiment d'apporter une solution: Compositeur installation ne pas installer les paquets lors de l'exécution dans le Dockerfile

  • Essayez d'utiliser le COPIER-compositeur.json ./ au lieu de COPIER les compositeur.json compositeur.verrouillage ./ (ne pas copier compositeur.lock) Et avoir cette ligne de COPIE . . au-dessus de compositeur installer
  • COPIE . . copier le répertoire entier, de sorte que la copie de compositeur.json et compositeur.serrure de toute façon. Et pourquoi ne voudrais-je pas copier le fichier de verrouillage? C'est ce que je veux à la base de mon installation sur.
  • Vous devez ajouter compositeur.verrouillage de votre .dockerignore ensuite. Veuillez prendre un coup d'oeil: getcomposer.org/doc/...
  • Si je fais ça, alors je suis essentiellement de course compositeur de mise à jour. Ce n'est pas ce que je veux. Je ne suis pas après les dernières versions des dépendances, je veux les versions qui sont dans le compositeur.fichier de verrouillage. Actuellement, le vendeur dossier n'est pas encore en cours de création, je ne reçois rien...
  • Avez-vous essayé de mettre de la COPIE . . au-dessus de compositeur la commande d'installation?
  • Oui - essayé...
  • qu'avez-vous à votre panneau-composer.yml?

InformationsquelleAutor JBxOnline | 2017-10-17