Docker контейнер выходит с кодом 0 после запуска composer install - PullRequest
0 голосов
/ 05 июля 2018

У меня есть файл Docker, который выглядит так:

FROM php:7.0-apache
MAINTAINER "Moritz Buettner"

RUN apt-get update && apt-get install -y libpq-dev >/dev/null 2>&1\
    && docker-php-ext-configure pgsql -with-pgsql=/usr/local/pgsql >/dev/null 2>&1\
    && docker-php-ext-install pdo pdo_pgsql pgsql mbstring >/dev/null 2>&1

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

RUN apt-get install -y git >/dev/null 2>&1
RUN apt-get install -y zip >/dev/null 2>&1
RUN apt-get install -y unzip >/dev/null 2>&1

COPY api /var/www
RUN a2enmod rewrite && rm -r /var/www/html && ln -sf /var/www/public /var/www/html
RUN chmod -R 777 /var/www

RUN mkdir -m 777 -p /var/www/public/export-files/csv

CMD bash -c "cd /var/www && composer install --prefer-dist --no-scripts --no-autoloader"

При создании образа и запуске контейнера composer устанавливает все как положено, но после завершения контейнер завершает работу с кодом 0.

Вывод docker-compose up:

[... composer installing stuff ...]
inventar-api | Generating autoload files
inventar-api | > Illuminate\Foundation\ComposerScripts::postInstall
inventar-api | > php artisan optimize
inventar-api | Generating optimized class loader
inventar-api | The compiled class file has been removed.
inventar-api exited with code 0

Затем я попытался перезапустить контейнер вручную, но он мгновенно закрывается.

У вас есть предложение, почему это происходит?

РЕДАКТИРОВАТЬ: до добавления композитора в файл Docker все работало хорошо.

1 Ответ

0 голосов
/ 05 июля 2018

Когда в Dockerfile написано

CMD bash -c "cd /var/www && composer install --prefer-dist --no-scripts --no-autoloader"

Затем, когда вы запускаете контейнер, Docker запускает эту команду, а когда эта команда завершается, контейнер завершается. Поскольку в нем указано «состояние выхода 0», команда успешно выполнена.

Возможно, вы хотите запустить composer install как шаг RUN внутри Dockerfile и иметь CMD, который фактически запускает ваш сервис.

...