#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, перестроил контейнеры и успешно подключил скрипт.