首页 > 解决方案 > Docker php mysql 找不到驱动程序

问题描述

我试图在 docker 容器中配置 PHP + MySQL 设置,但出现以下错误:

Fatal error: Uncaught PDOException: could not find driver in /var/www/html/chapter5/connection.php:29 Stack trace: #0 {main} thrown in /var/www/html/chapter5/connection.php on line 29

docker-compose.ymlDockerFileconnection.php脚本如下:

version: "3"

services:
  www:
    container_name: playpen_www
    build: .
    restart: 'always'
    ports:
      - '81:80'
    volumes:
      - .:/var/www/html
    depends_on:
      - db
  db:
    container_name: playpen_db
    image: mysql
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: pdo-demo
      MYSQL_USER: user
      MYSQL_PASSWORD: password
    ports:
      - '3307:3306'
  adminer:
    image: adminer
    container_name: playpen_adminer
    restart: always
    ports:
      - 8080:8080

FROM php:7.4.24-apache
RUN apt-get update -y && apt-get upgrade -y
RUN apt-get install tree nano -y

// $host = '127.0.0.1';
$host = 'playpen_db';
$port = 3307;
$dbname = 'pdo-demo';
$charset = 'utf8mb4';
$dsn = "mysql:host={$host};port={$port};dbname={$dbname};charset={$charset}";

$options = [ 
    PDO::ATTR_ERRMODE   =>  PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE    =>  PDO::FETCH_ASSOC,
];

try {
    $pdo = new \PDO($dsn, 'user', 'password', $options);
} catch (PDOException $PDOException) {
    print PHP_EOL . "<br><br>" . $PDOException . "<br>";
    throw new PDOException($PDOException->getMessage(), (int) $PDOException->getCode());
}

在我执行的playpen_www容器中/usr/local/bin/docker-php-ext-enable pdo_mysql,我确认pdopdo_mysql模块都被列为已启用。

标签: phpmysqldockerconnectionexception

解决方案


非常烦人的是,问题出在数据库名称上。

除了安装pdo_mysql,我在代码和docker-conpose文件中把pdo-demo改成了pdo_demo,重建了容器,脚本连接成功。


推荐阅读