【问题标题】:Can't load mysqlnd extension in php:fpm-alpine无法在 php:fpm-alpine 中加载 mysqlnd 扩展
【发布时间】:2020-11-22 19:22:47
【问题描述】:

我正在尝试基于 php:fpm-alpine 设置一个 php 图像。 我想让 php 使用 mysqlnd 扩展。更好的说法是:我希望文件 mysqlnd.so 位于扩展文件夹 /usr/local/lib/php/extensions/no-debug-non-zts-20190902 中。不知何故,这似乎是存储.so-files 的文件夹。

我在 php conf.d 文件夹中有一个用于启用扩展的 .ini 文件:

; configuration for php mysql module
; priority=10
extension=mysqlnd

我的 Dockerfile 看起来像这样:

FROM php:fpm-alpine

RUN apk update --no-cache \
    && apk add --no-cache $PHPIZE_DEPS \
    && apk add --no-cache php-mysqlnd \
    && docker-php-ext-install mysqlnd \
    && docker-php-ext-enable mysqlnd 

当我尝试构建图像时,它会停止输出(仅相关部分):

#5 7.687 fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/main/x86_64/APKINDEX.tar.gz
#5 7.820 fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/community/x86_64/APKINDEX.tar.gz
#5 7.980 (1/3) Installing php7-common (7.3.24-r0)
#5 8.000 (2/3) Installing php7-openssl (7.3.24-r0)
#5 8.021 (3/3) Installing php7-mysqlnd (7.3.24-r0)
#5 8.048 OK: 255 MiB in 59 packages
#5 9.541 fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/main/x86_64/APKINDEX.tar.gz
#5 9.819 fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/community/x86_64/APKINDEX.tar.gz
#5 10.15 (1/1) Installing .phpize-deps (20201122.190848)
#5 10.16 OK: 255 MiB in 60 packages
#5 10.22 Cannot find config.m4. 
#5 10.22 Make sure that you run '/usr/local/bin/phpize' in the top level source directory of the module
#5 10.22 
------

错误基本上是:

#5 10.22 Cannot find config.m4.

Make sure that you run '/usr/local/bin/phpize' in the top level source directory of the module

我还创建了一个没有 mysqlnd 的功能映像,并尝试从 cointainer 的 cli 手动安装它。它也没有工作。

非常感谢您的帮助,因为我似乎无法让它工作。

【问题讨论】:

    标签: php docker docker-compose dockerfile docker-image


    【解决方案1】:

    发生这种情况是因为您不必安装它,it is there already

    运行此命令

    docker run -ti php:fpm-alpine php -i | grep mysqlnd
    

    产生这个输出:

    Configure Command =>  './configure'  '--build=x86_64-linux-musl' '--with-config-file-path=/usr/local/etc/php' '--with-config-file-scan-dir=/usr/local/etc/php/conf.d' '--enable-option-checking=fatal' '--with-mhash' '--with-pic' '--enable-ftp' '--enable-mbstring' '--enable-mysqlnd' '--with-password-argon2' '--with-sodium=shared' '--with-pdo-sqlite=/usr' '--with-sqlite3=/usr' '--with-curl' '--with-libedit' '--with-openssl' '--with-zlib' '--with-pear' '--enable-fpm' '--with-fpm-user=www-data' '--with-fpm-group=www-data' '--disable-cgi' 'build_alias=x86_64-linux-musl'
    mysqlnd
    mysqlnd => enabled
    Version => mysqlnd 7.4.12
    Loaded plugins => mysqlnd,debug_trace,auth_plugin_mysql_native_password,auth_plugin_mysql_clear_password,auth_plugin_caching_sha2_password,auth_plugin_sha256_password
    

    重要的部分在哪里:

    mysqlnd => enabled
    Version => mysqlnd 7.4.12
    

    【讨论】:

    • 几分钟前我自己想通了。我的问题是 .ini 文件。因为它在文件夹中寻找一个 mysqlnd.so 文件来动态添加模块。我最终使用github.com/mlocati/docker-php-extension-installer 来更轻松地安装模块。对于 mysqlnd,我刚刚删除了 .ini 文件,因为它无论如何都包含在内。不过我还是要谢谢你:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-25
    • 2015-04-09
    • 2018-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多