【问题标题】:Can't install PHP extensions in Docker无法在 Docker 中安装 PHP 扩展
【发布时间】:2021-12-27 08:44:36
【问题描述】:

我正在尝试在 Raspberry Pi 4 上从 Dockerfile 安装 PHP。我的 Dockerfile 中有一个简单的代码:

FROM php:7.4-apache
LABEL maintainer="dev@chialab.io"

# Download script to install PHP extensions and dependencies
ADD https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/

RUN chmod uga+x /usr/local/bin/install-php-extensions && sync

RUN DEBIAN_FRONTEND=noninteractive apt-get update
RUN DEBIAN_FRONTEND=noninteractive apt-get install -qq -y curl

#RUN install-php-extensions mysqli pdo_mysql zip

RUN docker-php-ext-install pdo_mysql
RUN docker-php-ext-install mysqli
RUN docker-php-ext-install zip
RUN a2enmod rewrite

'docker-php-ext-install' 部分之前一切顺利。然后控制台中的执行停止,最后的信息是这样的:

Step 6/9 : RUN docker-php-ext-install pdo_mysql
 ---> Running in 72e3ce3bad85

我也尝试了 Dockerfile 中的 'install-php-extensions' 命令,但结果相同。

另一种解决方案我尝试的是在控制台中运行以下命令:

docker run --restart always -p 80:80 --name php -v "$PWD":/var/www -d php:7.4-apache

并从容器内部安装 PHP 扩展:

docker exec -it php /bin/bash
docker-php-ext-install mysqli

但我遇到了同样的问题:它只是停止了。顺便说一句,我觉得奇怪的是,当我使用 'docker run' 安装 PHP 时,会安装几十个 PHP 扩展,但没有安装 mysqli、pdo_mysql 或 zip(我需要这三个)。

在这两种情况下,我都将它放置了一个多小时,但没有任何动静,它只是停止了,没有任何反应。

我尝试重新启动 docker 守护程序,清除缓存,但没有任何帮助。

【问题讨论】:

    标签: php docker dockerfile php-extension


    【解决方案1】:

    让我们从 Dockerfile 开始。我首先看到的是DEBIAN_FRONTEND=noninteractive 添加到几乎每个运行命令中。最好通过ARG 声明一次,然后忘记yes/no(示例如下)。

    另一件事是RUN 指令的层数。只能说越少越好。更多信息请阅读best practicies

    在简化和修改您的 docker 配方并运行构建命令后:

    docker build --no-cache=true -t php-apache .
    

    我收到一个错误

    No package 'libzip' found

    在将libzip-dev 添加到配方并再次运行构建命令后,我们将获得一个图像。)我还将 index.php 文件放在 Dockerfile 与phpinfo() 函数所在的同一文件夹中检查是否安装了扩展(包含更改的 docker 文件和运行容器的命令,您可以在下面找到)

    docker run --name php-apache -d -p 8181:80 php-apache

    FROM php:7.4-apache
    
    ADD https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/
    RUN chmod uga+x /usr/local/bin/install-php-extensions && sync
    
    # much simplier to use ARG instead of specifiying it each time on the FLY before each install command
    ARG DEBIAN_FRONTEND=noninteractive
    
    # 1 RUN = 1 layer, more memory to consume. Better to group everthing under one layer as much as possible
    RUN apt-get update && apt-get install -qq \
        curl \
        libzip-dev \
        && docker-php-ext-install pdo_mysql mysqli zip \
        && a2enmod rewrite
    # this line can be removed if you don't want to check php extensions
    WORKDIR /var/www/html
    # this line also can be removed if you don't want to check php extensions
    COPY index.php .
    

    【讨论】:

      猜你喜欢
      • 2020-04-11
      • 2017-05-20
      • 2021-03-23
      • 1970-01-01
      • 2023-01-14
      • 2016-04-29
      • 1970-01-01
      • 1970-01-01
      • 2017-03-04
      相关资源
      最近更新 更多