首页 > 解决方案 > PDO 找不到驱动程序 (DOCKER)

问题描述

我有以下 docker.yml 文件

version: "3"
services:
  wwww:
    build: .
    ports:
      - "8888:80"
    volumes:
      - "./src:/var/www/html/"
    networks:
      - default
  db:
    image: mysql
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: example

  adminer:
    image: adminer
    restart: always
    ports:
      - 8060:8080

php的docker文件是

FROM php:7.2-apache
RUN docker-php-ext-install mysqli pdo pdo_mysql

我检查phpinfo() 并为 sqlite 启用了 pdo 驱动程序。

即使我执行 docker-compose 我也会收到以下警告 warning: pdo (pdo.so) is already loaded!

但是,我仍然得到一个未找到 pdo 的异常。

有什么我想念的吗?

确切的错误是

Fatal error: Uncaught PDOException: could not find driver in /var/www/html/index.php:5 

Stack trace: 
#0 /var/www/html/index.php(5): PDO->__construct('mysql:host=127....', 'root', 'example') 
#1 {main} thrown in /var/www/html/index.php on line 5

标签: phpmysqldockerpdo

解决方案


您好 Orestis,欢迎来到堆栈溢出!我已经运行了您Dockerfile并启动了 PDO 连接,并且得到了正确的行为。

您是否正在运行旧版本的过时映像Dockerfile?你能尝试用Dockerfile上面的方法重建你的形象吗?根据您的说法,您docker-compose.yml应该可以在项目中使用此命令:

docker-compose build wwww

这是我对你的快速测试Dockerfile,这对我来说似乎没问题:

启用pdo_mysql (正确的行为,因为没有服务器运行):

Fatal error: Uncaught PDOException: SQLSTATE[HY000] [2002] Connection refused in /var/www/html/test.php:3
Stack trace:
#0 /var/www/html/test.php(3): PDO->__construct('mysql:host=127....', 'user', 'password')
#1 {main}
  thrown in /var/www/html/test.php on line 3

禁用pdo_mysql (正确,因为我手动删除了扩展名):

Fatal error: Uncaught PDOException: could not find driver in /var/www/html/test.php:3
Stack trace:
#0 /var/www/html/test.php(3): PDO->__construct('mysql:host=127....', 'user', 'password')
#1 {main}
  thrown in /var/www/html/test.php on line 3

请让我知道重建您的图像是否解决了问题。


推荐阅读