Драйвер PDO mysql не поддерживается, отображается при запуске контейнера проекта на базе Admidio.

Вопрос или проблема

Недавно я попытался создать Docker-контейнер в своем веб-приложении на базе Admidio, но столкнулся с небольшой ошибкой:

Когда я открываю веб-страницу localhost:8080, она отображает следующее сообщение:

“Запрашиваемый драйвер PDO mysql не поддерживается”

Я несколько раз изменял файл docker-compose.yaml и Dockerfile.

Вот файл docker-compose.yaml:

services:
  php:
    image: php:7.4-apache
    ports:
      - '8080:80'
    volumes:
     - /Applications/XAMPP/xamppfiles/htdocs/project:/var/www/html
    environment:
      - APACHE_RUN_USER=www-data
      - APACHE_RUN_GROUP=www-data
      - PHP_EXTENSION=pdo_mysql
    depends_on:
      - db
  phpmyadmin:
    image: phpmyadmin:latest
    restart: always
    ports:
      - '8077:80'
    environment:
      - PMA_HOST=db
      #- PMA_ARBITRARY=1
    depends_on:
      - db
  db:
    image: mysql:latest
    ports:
      - '5506:3306'
    restart: always
    environment:
      MYSQL_ALLOW_EMPTY_PASSWORD: TRUE
      MYSQL_USER: user
      MYSQL_PASSWORD: 1234567
      MYSQL_ROOT_PASSWORD: 1234567

И Dockerfile:

FROM php:7.4-apache

WORKDIR /var/www/html/

RUN a2enmod rewrite

RUN apt-get update && apt-get upgrade -y

RUN docker-php-ext-install mysqli pdo pdo_mysql

COPY . /var/www/html/

RUN chown www-data:www-data /var/www/html/
RUN chmod 755 /var/www/html/

# запускаем Apache2 при старте образа

EXPOSE 80

# Используем официальный образ MySQL в качестве основы
FROM mysql:latest

# Устанавливаем рабочую директорию на /app
WORKDIR /app

# Копируем содержимое текущей директории в контейнер в /app
ADD . /app

# Устанавливаем пользователя по умолчанию для образа MySQL
USER mysql

# Устанавливаем переменные окружения для нового пользователя
ENV MYSQL_USER=external_user
ENV MYSQL_PASSWORD=password
ENV MYSQL_DATABASE=my_database

# Выполняем следующие команды для создания нового пользователя и предоставления ему необходимых прав
RUN mysql -u root -p -e "CREATE USER '$MYSQL_USER'@'%' IDENTIFIED BY '$MYSQL_PASSWORD';"
RUN mysql -u root -p -e "GRANT ALL PRIVILEGES ON $MYSQL_DATABASE.* TO '$MYSQL_USER'@'%';"
RUN mysql -u root -p -e "FLUSH PRIVILEGES;"

# Открываем порт 3306 для подключения к базе данных
EXPOSE 3306

# Запускаем сервер MySQL при запуске контейнера
CMD ["mysqld"]

Спасибо!

Ответ или решение

При создании Docker-контейнера для проекта на базе Admidio вы столкнулись с ошибкой: "Запрашиваемый драйвер PDO mysql не поддерживается". Эта проблема может возникать по нескольким причинам, связанным с конфигурацией вашего контейнера и наличием необходимых расширений PHP.

1. Проверка конфигурации Dockerfile

В вашем Dockerfile при установке расширений PHP необходимо убедиться, что вы устанавливаете pdo и pdo_mysql. Ваша команда docker-php-ext-install выглядит правильно, но стоит проверить, что установка проходит без ошибок.

RUN docker-php-ext-install mysqli pdo pdo_mysql

Имейте в виду, что если у вас нет необходимые зависимости (например, libjpeg-dev, libpng-dev для работы с изображениями или аналогичных для других расширений), это может привести к тому, что расширения не установятся должным образом.

2. Переписка Dockerfile и docker-compose.yaml

Ваш текущий Dockerfile содержит лишнее. Вы используете два базовых образа (например, php:7.4-apache и mysql:latest), что неверно. Один Dockerfile должен относиться к одному образу. Если вы хотите использовать обоих, рассмотрите создание двух отдельных Dockerfile и соответствующих сервисов в docker-compose. Вот пример исправленного Dockerfile:

FROM php:7.4-apache

WORKDIR /var/www/html/

# Установка необходимых зависимостей
RUN apt-get update && apt-get install -y libzip-dev \
    && docker-php-ext-install mysqli pdo pdo_mysql \
    && a2enmod rewrite

# Копирование контента проекта
COPY . /var/www/html/

RUN chown -R www-data:www-data /var/www/html \
    && chmod -R 755 /var/www/html

EXPOSE 80

3. Изменения в docker-compose.yaml

Убедитесь, что ваш docker-compose.yaml файл правильно настраивает зависимости. Например:

version: '3.7'

services:
  php:
    build: .
    ports:
      - '8080:80'
    volumes:
      - /Applications/XAMPP/xamppfiles/htdocs/project:/var/www/html
    depends_on:
      - db
  db:
    image: mysql:latest
    ports:
      - '5506:3306'
    restart: always
    environment:
      MYSQL_ALLOW_EMPTY_PASSWORD: TRUE
      MYSQL_USER: user
      MYSQL_PASSWORD: 1234567
      MYSQL_ROOT_PASSWORD: 1234567

4. Пересоздание образов и контейнеров

После внесения изменений вам необходимо пересоздать образы и контейнеры:

docker-compose down
docker-compose build
docker-compose up -d

Убедитесь, что при сборке образа нет ошибок и все расширения установлены корректно.

5. Проверка журнала ошибок

Если проблема сохраняется, посмотрите журналы ошибок PHP и Apache. Это можно сделать, запустив:

docker-compose logs php

или получите доступ внутрь контейнера:

docker exec -it <имя_контейнера> bash
cat /var/log/apache2/error.log

Заключение

Следуя приведённым рекомендациям, вы сможете устранить ошибку с драйвером PDO. Убедитесь, что все настройки выполнены грамотно, а расширения PHP установлены должным образом. Если остались вопросы, не стесняйтесь искать помощь в документации Docker или сообществе Admidio.

Оцените материал
Добавить комментарий

Капча загружается...