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