Докер php mysql не смог найти драйвер

#php #mysql #docker #connectionexception

Вопрос:

Я пытаюсь настроить настройку PHP MySQL в контейнерах docker, но получаю следующую ошибку:

 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.yml , DockerFile и connection.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 amp;amp; 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 , и я подтвердил, что модули pdo и pdo_mysql перечислены как включенные.

Ответ №1:

Попробуйте добавить это в свой файл Dockerfile:

 RUN docker-php-ext-install pdo_mysql  

Это гарантирует, что модуль будет установлен в docker engine всякий раз, когда вы запускаете свой образ.

Комментарии:

1. Спасибо Тим, но проблема была не в этом

Ответ №2:

Довольно досадно, что проблема была с именем базы данных.

В дополнение к установке pdo_mysql я изменил pdo-демо на pdo_demo в файлах кода и docker, перестроил контейнеры и успешно подключил скрипт.