如何在php docker镜像中安装pdo驱动? [英] How to install pdo driver in php docker image?
问题描述
我正在使用 php docker容器作为基础,使用标签:
php:5.6-apache
我将其与基本的 mysql:5.6
主机 mysql
。我创建了一个数据库,并填写了一个基本值的表。
然而,尝试访问我的应用程序,我得到:
致命错误:未通知的异常PDOException消息
在/var/www/html/index.php找不到驱动程序: 30
堆栈跟踪:#0 [内部函数]:
PDO-> __构造('mysql:主机= mysq ...','根','根',数组)
#1 [内部功能]: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,对象(Phalcon\Di\FactoryDefault))
#5 [内部函数]:Phalcon\Di-> get('db',NULL)
#6 [内部函数]:Phalcon\\ \\ Di-> getShared('db')
#7 [内部函数]:Phalcon\Mvc\Model\Manager-> _getConnection(Object评论),$)
#8 [内部函数]:Phalcon\Mvc\Model\Manager-> getReadConnection(Object(Reviews))
#9 [内部函数]:Phalcon\ Mvc\Model-> getReadConnection()
#10 [内部函数]: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
; php的配置MySQL模块
; priority = 20
extension = pdo_mysql.so
如果我 echo phpinfo(); die
它告诉我:
ini文件解析:
/usr/local/etc/php/conf.d/mysql.ini,
/usr/local/etc/php/conf.d/phalcon.ini
然而,仍然存在错误。
此外,当运行:
php -i | grep PDO
/ pre>
我得到:
PHP警告:PHP启动:无法加载动态库'/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:无法打开共享对象文件:没有这样的文件或目录在未知的行0
PDO
PDO支持=>启用
PDO drivers => sqlite
用于SQLite的PDO驱动程序3.x =>启用
所以似乎mysql扩展名甚至没有激活。
我做错了什么?
解决方案
PHP的官方存储库有一个脚本叫做
docker-php-ext-install
https://github.com/docker-library/php/tree/master/5.6
您忘记安装运行PDO所需的扩展。
尝试创建一个这样的docker图像:
FROM php :5.6-apache
#PHP扩展名
RUN docker-php-ext-install pdo pdo_mysql pdo_pgsql
I am using as a base the php docker container with the tag:
php:5.6-apache
I linked it with a basic
mysql:5.6
image which I can reach at the hostmysql
. I created a DB, and filled a table with basic values.Yet trying to access my app, I get:
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
Hence, I thought that the php container was lacking the
php-mysql
component I installed via:apt-get install php5-mysql
I also added a mysql.ini at:
cat /usr/local/etc/php/conf.d/mysql.ini ; configuration for php MySQL module ; priority=20 extension=pdo_mysql.so
If I
echo phpinfo();die
it tells me that:Additional .ini files parsed: /usr/local/etc/php/conf.d/mysql.ini, /usr/local/etc/php/conf.d/phalcon.ini
Yet still, the error persists.
Furthermore, when running:
php -i|grep PDO
I get:
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
so it seems the mysql extension isn't even activated.
What am I doing wrong?
解决方案The official repository of PHP has a script called
docker-php-ext-install
https://github.com/docker-library/php/tree/master/5.6You forgot to install the extension needed to run the PDO.
Try do create a docker image like this:
FROM php:5.6-apache # PHP extensions RUN docker-php-ext-install pdo pdo_mysql pdo_pgsql
这篇关于如何在php docker镜像中安装pdo驱动?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!