Php

如何在 PHP Apache Docker 容器中正確設置作曲家

  • November 11, 2022

我的 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

作曲家安裝在告訴我需要該libzip軟體包時失敗。但是,無論 via pecl, via ,我都找不到那個包apt-get;正如大多數論壇文章所指的那樣。我該如何安裝libzip才能最終讓事情執行起來?

關於我的 Dockerfile 行的一些註釋;如果我的設置有誤,請隨時糾正我;這是我第一次這樣做:

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

據我了解,官方文件告訴您使用這種多階段方法讓 Composer 以最佳方式在您的 PHP Docker 容器中執行。如果我理解正確,這樣做可以讓您共享您的圖像,而無需您的同事在本地安裝 composer / 下載包;然後一切都將在容器內完成。這正是我正在尋找的。

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現在,由於最初提到的問題,我被困住了。

如果您看到設置作曲家的更好方法;我很高興聽到更好的方法。

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/*

引用自:https://serverfault.com/questions/1115421