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配置修改