Вопрос или проблема
Недавно я попытался создать 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.