@toorr2p
https://github.com/Cleverscript

Как запустить composer i в контейнере PHP что бы он остался в статусе Up?

Идея такая: что бы при старте контейнера в нем сразу загружались все перечисленные зависимости из файла composer.json

Не могу понять почему такое решение приводит к тому что контейнер с PHP уходит в статус Exited (0)

Dockerfile
FROM php:8.3.9-fpm

RUN apt-get update && apt-get install --no-install-recommends --no-install-suggests -y \ 
    git \
    cron \
    curl \
    wget \
    zip \
    unzip \
    vim \
    htop \
    man \
    procps \
    libmcrypt-dev \
    libmagickwand-dev \
    && rm -rf /var/lib/apt/lists/*

RUN docker-php-ext-install bcmath

RUN pecl install xdebug \
    && docker-php-ext-enable xdebug;

RUN docker-php-ext-install opcache && \
    docker-php-ext-configure opcache --enable-opcache && \
    docker-php-ext-install sockets;

RUN docker-php-ext-configure exif
RUN docker-php-ext-install exif
RUN docker-php-ext-enable exif

# Install Composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

# копируем кастомные конфиги PHP
COPY ./conf.d/* ${PHP_INI_DIR}/conf.d/

# создаем группу и пользователя под которым будет запускаться PHP
RUN groupadd -g 1000 php_kafka
RUN useradd -u 1000 -g php_kafka -G sudo -m php_kafka
RUN echo 'php_kafka:qwerty' | chpasswd
# указываем под каким пользователем запускать PHP
USER php_kafka

WORKDIR /var/www/public

ENTRYPOINT ["composer"]
CMD ["i"]


Вопрос как такое реализовать что бы PHP не отвалился?
  • Вопрос задан
  • 123 просмотра
Решения вопроса 1
liaFcipE
@liaFcipE
Ну потому, что ты запускаешь композер... И все, это весь твой ENTRYPOINT, который отработав отдает код 1. Ты же не запускаешь свой условный php-fpm и правда этому удивляешься?

> что бы при старте контейнера в нем сразу загружались все перечисленные зависимости из файла composer.json

В этом не то, чтобы много смысла, Dockerfile это не про старт контейнера, а его сборку. Если тебе нужно будет обновить зависимости - ты будешь пересобирать весь образ? Это не очень логично.

Можно запустить любой готовый образ композера с командой install, чтобы у тебя приехали все зависимости.
Можно зайти в шелл запущенного контейнера php и сделать composer i.
Можно конечно написать рабочий Dockerfile, который делает RUN composer i, а в ENTRYPOINT'е имеет запуск демона php-fpm...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы