簡體   English   中英

如何在 php docker 映像中安裝 pdo 驅動程序?

[英]How to install pdo driver in php docker image?

我使用帶有標簽的php docker 容器作為基礎:

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 的官方倉庫有一個腳本叫做docker-php-ext-install https://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

如果您需要使用 php 8.1 並使用 pdo 和 pdo_mysql 擴展,請嘗試以下操作:

FROM php:8.1-fpm
WORKDIR /var/www/html
RUN apt-get update && apt-get install -y \
        libfreetype6-dev \
        libjpeg62-turbo-dev \
        libpng-dev \
    && docker-php-ext-configure gd --with-freetype --with-jpeg \
    && docker-php-ext-install -j$(nproc) gd \
    && docker-php-ext-install pdo_mysql

默認情況下安裝 pdo 擴展,並根據您的用例更改WORKDIR

PHP 官方 Docker 鏡像頁面了解更多信息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM