如何在 PHP Apache Docker 容器中正确设置 Composer

如何在 PHP Apache Docker 容器中正确设置 Composer

我的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需要软件包时失败了。但是我找不到该软件包,无论是通过pecl,还是通过apt-get; ,正如大多数论坛帖子所提到的。我该如何安装libzip才能最终让一切运行起来?

关于我的 Dockerfile 行的一些注释;如果我的设置有误,请随时纠正我;这是我第一次这样做:

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

据我了解,官方文档告诉您使用这种多阶段方法以最佳方式在 PHP Docker 容器中运行 Composer。如果我理解正确的话,以这种方式执行可以共享您的图像,而无需您的同事在本地安装 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问题而陷入困境。

如果您看到了设置作曲家的更好方法;我很高兴听到更好的方法。

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

相关内容