I m trying to Dockerize my laravel app. The app is already built and in git, but I .gitignore my vendor folder. I ve added a Dockerfile, which looks like this:
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
When I build, this seems to work great. I see the dependencies getting downloaded, I see the autoload file being generated in the output. However, once the build is complete, the vendor folder is not actually there. I m guessing it was all done in an intermediate container which was then removed? So when I run docker-compose up, I get: Fatal error: require(): Failed opening required /var/www/html/bootstrap/../vendor/autoload.php
这个帖子似乎指向可能的问题,但并没有真正提供解决方案:运行Dockerfile时,Composer安装不安装软件包