Как правильно настроить композитор в контейнере PHP Apache Docker

Содержимое моего Dockerfile:

      FROM php:8.1-apache

WORKDIR /var/www/html/

RUN pecl install xdebug \
    && docker-php-ext-enable xdebug \
    && a2enmod rewrite \
    && docker-php-ext-install zip

COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
COPY composer.json composer.json
COPY composer.lock composer.lock

RUN groupadd -r user && useradd -r -g user user
USER user
RUN composer install --no-dev

COPY . .

EXPOSE 80

Установка композитора завершается сбоем в тот момент, когда он сообщает мне, что пакет необходим. Однако я не могу найти этот пакет, даже если черезpecl, с помощьюapt-get; как упоминается в большинстве сообщений на форуме. Как я могу установить, чтобы наконец все заработало?

Несколько примечаний к моим строкам в Dockerfile; не стесняйтесь поправлять меня, если я ошибаюсь в настройке; делаю это впервые:

      COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
COPY composer.json composer.json
COPY composer.lock composer.lock

Насколько я понял, в официальной документации вам рекомендуется использовать этот многоэтапный подход для оптимальной работы композитора в вашем PHP-контейнере Docker. Если я правильно понял, то, сделав это таким образом, вы сможете поделиться своим изображением, и вашим коллегам не придется устанавливать композитор/загружать пакеты локально; тогда все будет сделано внутри контейнера. Это именно то, что я ищу.

      RUN groupadd -r user && useradd -r -g user user
USER user
RUN composer install --no-dev

Сначала я попытался просто запустить последнюю строкуcomposer install --no-dev, что на самом деле не будет работать, поскольку контейнер не позволит вам выполнять команды root; используется по умолчаниюcomposer. Отсюда и причина этого обходного пути (смена пользователя также рекомендуется в официальной документации; согласно ссылке выше).

&& docker-php-ext-install zip

Когда наконец удалось запуститьcomposer installкоманда внутри контейнера, она сказала мне, чтоzipнеобходимо расширение; поэтому я добавилdocker-php-ext-install zipкоманда. Теперь я застрял из-за первоначально упомянутогоlibzipпроблема.

Если вы видите лучший способ настроить композитор; Я рад услышать о лучшем способе.

1 ответ

docker-php-ext-enableищет файлы заголовковlibzip . Вам нужен пакетlibzip-dev.

      RUN pecl install xdebug \
    && apt update \
    && apt install libzip-dev -y \
    && docker-php-ext-enable xdebug \
    && a2enmod rewrite \
    && docker-php-ext-install zip \
    && rm -rf /var/lib/apt/lists/*
Другие вопросы по тегам