Как правильно настроить композитор в контейнере 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/*