【问题标题】:How to install pdo driver in php docker image?如何在 php docker 映像中安装 pdo 驱动程序?
【发布时间】:2016-09-28 08:00:04
【问题描述】:

我使用带有标签的php docker container 作为基础:

php:5.6-apache

我将它与一个基本的mysql:5.6 图像相关联,我可以通过主机mysql 访问该图像。我创建了一个数据库,并用基本值填充了一个表。

但尝试访问我的应用程序,我得到:

Fatal error: Uncaught exception 'PDOException' with message
could not find driver' in /var/www/html/index.php:30 
Stack trace: #0 [internal function]: 
PDO->__construct('mysql:host=mysq...', 'root', 'root', Array) 
#1 [internal function]: Phalcon\Db\Adapter\Pdo->connect(Array)
#2 /var/www/html/index.php(30): Phalcon\Db\Adapter\Pdo-__construct(Array)
#3 [internal function]: {closure}()
#4 [internal function]: Phalcon\Di\Service->resolve(NULL, Object(Phalcon\Di\FactoryDefault))
#5 [internal function]: Phalcon\Di->get('db', NULL)
#6 [internal function]: Phalcon\Di->getShared('db')
#7 [internal function]: Phalcon\Mvc\Model\Manager->_getConnection(Object(Reviews), NULL)
#8 [internal function]: Phalcon\Mvc\Model\Manager->getReadConnection(Object(Reviews))
#9 [internal function]: Phalcon\Mvc\Model->getReadConnection()
#10 [internal function]: Phalcon\Mvc\Model\MetaData\Strategy\Introspection->getMetaData(Object(Reviews), Object(Phalcon\Di\FactoryDefault))
#11 [internal function]: Phalcon\Mvc\Model\MetaData->_initialize(Object(Rev in /var/www/html/index.php on line 30

因此,我认为 php 容器缺少我通过以下方式安装的 php-mysql 组件:

apt-get install php5-mysql

我还在以下位置添加了一个 mysql.ini:

cat /usr/local/etc/php/conf.d/mysql.ini
; configuration for php MySQL module
; priority=20
extension=pdo_mysql.so

如果我echo phpinfo();die 它告诉我:

Additional .ini files parsed:
    /usr/local/etc/php/conf.d/mysql.ini,
    /usr/local/etc/php/conf.d/phalcon.ini

然而,错误仍然存​​在。

此外,运行时:

php -i|grep PDO

我明白了:

PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/local/lib/php/extensions/no-debug-non-zts-20131226/pdo_mysql.so' - /usr/local/lib/php/extensions/no-debug-non-zts-20131226/pdo_mysql.so: cannot open shared object file: No such file or directory in Unknown on line 0
PDO
PDO support => enabled
PDO drivers => sqlite
PDO Driver for SQLite 3.x => enabled

所以似乎 mysql 扩展甚至没有被激活。

我做错了什么?

【问题讨论】:

标签: php mysql pdo docker


【解决方案1】:

PHP的官方仓库有一个脚本叫docker-php-ext-installhttps://github.com/docker-library/php/tree/master/5.6

您忘记安装运行 PDO 所需的扩展。

尝试像这样创建一个 docker 映像:

FROM php:5.6-apache

# PHP extensions

RUN docker-php-ext-install pdo pdo_mysql

【讨论】:

  • 如果只使用MySQL,可以去掉PostgreSQLpdo_pgsql扩展,安装有额外要求。
  • RUN docker-php-ext-install pdo pdo_mysql 也适用于 MariaDB
猜你喜欢
  • 2019-01-26
  • 1970-01-01
  • 2018-09-15
  • 2023-01-13
  • 2016-03-16
  • 2016-05-31
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
相关资源
最近更新 更多