MySQL 函数在“php:7.1”docker 镜像中不可用

Posted

技术标签:

【中文标题】MySQL 函数在“php:7.1”docker 镜像中不可用【英文标题】:MySQL functions not available in "php:7.1" docker image 【发布时间】:2017-06-28 17:49:47 【问题描述】:

我正在使用“php:7.1” docker 映像来设置新项目的测试环境。我在尝试使用时遇到错误

$db = new mysqli(...);

获取数据库连接的函数。

我尝试在交互模式下使用 docker 映像手动查找必要的设置步骤:

docker run -i -t php:7.1 /bin/bash

我运行了我在网上找到的以下步骤来准备“mysqli”函数:

# update image
apt-get update
# install vim for local editing
apt-get install vim

我尝试通过以下帖子安装 mysql:How to enable MySQLi extension in php 7?

apt-get install php-mysql
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package php-mysql

我只尝试激活扩展,但由于扩展不存在而无法正常工作:

extension=php_mysqli.dll

错误:

php info.php |grep mysql
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/local/lib/php/extensions/no-debug-non-zts-20160303/php_mysqli.so' - /usr/local/lib/php/extensions/no-debug-non-zts-20160303/php_mysqli.so: cannot open shared object file: No such file or directory in Unknown on line 0
Configure Command =>  './configure'  '--with-config-file-path=/usr/local/etc/php' '--with-config-file-scan-dir=/usr/local/etc/php/conf.d' '--disable-cgi' '--enable-ftp' '--enable-mbstring' '--enable-mysqlnd' '--with-curl' '--with-libedit' '--with-openssl' '--with-zlib'
mysqlnd
mysqlnd => enabled
Version => mysqlnd 5.0.12-dev - 20150407 - $Id: b396954eeb2d1d9ed7902b8bae237b287f21ad9e $
Loaded plugins => mysqlnd,debug_trace,auth_plugin_mysql_native_password,auth_plugin_mysql_clear_password,auth_plugin_sha256_password
mysqlnd statistics =>

我不知道如何才能安装和启用扩展程序。

【问题讨论】:

尝试使用phpdocker.io 构建您的 docker 文件——它有一个生成器,可以让您勾选您想要的功能,并在最后得到一个工作的 docker 文件。真的很容易,避免了很多麻烦。 dll 是 Windows 的东西。对于 linux 你需要这样 我使用 .so 作为扩展名。这是来自网站的复制/粘贴。 【参考方案1】:

那是因为你做错了。第一件事是 MySQL 扩展,旧的,在 PHP 7+ 中被弃用。它也不存在于基于 Debian 的发行版上。所以你需要做的是创建一个Dockerfile,内容如下:

FROM php:7.1
RUN docker-php-ext-install mysqli && \
    docker-php-ext-install pdo_mysql

假设您在 Dockerfile 所在的目录中运行命令:

docker build -t <some_tag> .
docker run -it <some_tag> bash

您将进入容器的提示符,然后可以运行php -v,输出应类似于:

# php -m
[PHP Modules]
...
mysqli ===> MySQLi has been installed
mysqlnd ===> MySQLnd has been installed
...

【讨论】:

以上是关于MySQL 函数在“php:7.1”docker 镜像中不可用的主要内容,如果未能解决你的问题,请参考以下文章

Docker pull php:7.1-fpm的php.ini配置修改

使用Docker link快速搭建PHP开发环境

sh Ubuntu 16.04 - PHP开发(php 7.1,MySQL 5.7,apache 2.4)

给docker中的PHP安装 gd扩展

给docker中的PHP安装 gd扩展

php 7.1 特性 ArgumentCountError 异常