Почему не устанавливается mysqli в Docker?
Есть докерфайл
FROM phpdockerio/php:7.4-fpm RUN apt-get update && apt-get -y --no-install-recommends install mc php7.4-gd php7.4-imagick php7.4-intl php7.4-interbase php7.4-mbstring php7.4-mcrypt php7.4-memcache php7.4-memcached php7.4-mysql php7.4-mysqli php7.4-pdo php7.4-opcache php7.4-soap php7.4-xdebug php7.4-zip php7.4-pear php7.4-pdo-mysql && apt-get clean; rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/* |
FROM phpdockerio/php:7.4-fpm RUN apt-get update && apt-get -y --no-install-recommends install mc php7.4-gd php7.4-imagick php7.4-intl php7.4-interbase php7.4-mbstring php7.4-mcrypt php7.4-memcache php7.4-memcached php7.4-mysql php7.4-mysqli php7.4-pdo php7.4-opcache php7.4-soap php7.4-xdebug php7.4-zip php7.4-pear php7.4-pdo-mysql && apt-get clean; rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/*
Но почему-то при установке нет в модулях php mysqli
root@28a65a9eba80:/var/www# php -m Warning: PHP Startup: Unable to load dynamic library 'mcrypt' (tried: /usr/lib/php/20190902/mcrypt (/usr/lib/php/20190902/mcrypt: cannot open shared object file: No such file or directory), /usr/lib/php/20190902/mcrypt.so (/usr/lib/php/20190902/mcrypt.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [PHP Modules] apc apcu calendar Core ctype curl date dom exif FFI fileinfo filter ftp gettext hash iconv json libxml mbstring openssl pcntl pcre PDO Phar posix readline Reflection session shmop SimpleXML sockets sodium SPL standard sysvmsg sysvsem sysvshm tokenizer xml xmlreader xmlwriter xsl Zend OPcache zip zlib [Zend Modules] Zend OPcache |
root@28a65a9eba80:/var/www# php -m Warning: PHP Startup: Unable to load dynamic library 'mcrypt' (tried: /usr/lib/php/20190902/mcrypt (/usr/lib/php/20190902/mcrypt: cannot open shared object file: No such file or directory), /usr/lib/php/20190902/mcrypt.so (/usr/lib/php/20190902/mcrypt.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 [PHP Modules] apc apcu calendar Core ctype curl date dom exif FFI fileinfo filter ftp gettext hash iconv json libxml mbstring openssl pcntl pcre PDO Phar posix readline Reflection session shmop SimpleXML sockets sodium SPL standard sysvmsg sysvsem sysvshm tokenizer xml xmlreader xmlwriter xsl Zend OPcache zip zlib [Zend Modules] Zend OPcache
Дополнительно:
смотрите логи, и с чего появиться mysqli, если пакета php7.4-mysqli не существует
root@node3:~# apt list php7.4*mysql* Listing... Done php7.4-mysql-dbgsym/bookworm 1:7.4.33-8+0~20230904.88+debian12~1.gbp87c414 amd64 php7.4-mysql/bookworm 1:7.4.33-8+0~20230904.88+debian12~1.gbp87c414 amd64 root@node3:~# dpkg -L php8.1-mysql | grep .so /usr/lib/php/20210902/mysqli.so /usr/lib/php/20210902/mysqlnd.so /usr/lib/php/20210902/pdo_mysql.so root@node3:~# |
root@node3:~# apt list php7.4*mysql* Listing... Done php7.4-mysql-dbgsym/bookworm 1:7.4.33-8+0~20230904.88+debian12~1.gbp87c414 amd64 php7.4-mysql/bookworm 1:7.4.33-8+0~20230904.88+debian12~1.gbp87c414 amd64 root@node3:~# dpkg -L php8.1-mysql | grep .so /usr/lib/php/20210902/mysqli.so /usr/lib/php/20210902/mysqlnd.so /usr/lib/php/20210902/pdo_mysql.so root@node3:~#
# Install PHP extensions RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd mysqli pgsql pdo_pgsql |
# Install PHP extensions RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd mysqli pgsql pdo_pgsql
31 | >>> RUN docker-php-ext-install pdo_mysql 32 | RUN docker-php-ext-install mbstring 33 | RUN docker-php-ext-install exif -------------------- ERROR: failed to solve: process "/bin/sh -c docker-php-ext-install pdo_mysql" did not complete successfully: exit code: 127 ERROR: Service 'php' failed to build |
31 | >>> RUN docker-php-ext-install pdo_mysql 32 | RUN docker-php-ext-install mbstring 33 | RUN docker-php-ext-install exif -------------------- ERROR: failed to solve: process "/bin/sh -c docker-php-ext-install pdo_mysql" did not complete successfully: exit code: 127 ERROR: Service 'php' failed to build
Ответы:
Установить мало. Надо разрешить и включить.
Гуглите синтаксис docker-php-ext-install после установки в систему самого расширения.
Очень советую использовать https://github.com/mlocati/docker-php-extension-in...
Все работает из коробки, подключается в одну строчку, поддерживает море платформ/версий.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос

Проблема, связанная с установкой mysqli в Docker, может быть вызвана несколькими факторами. Вот несколько возможных причин и способы их решения:
1. Отсутствие расширения mysqli в PHP образе:
Убедитесь, что вы используете образ PHP, который содержит расширение mysqli. Для этого вы можете проверить Dockerfile, который вы используете для создания контейнера. Убедитесь, что в инструкции `RUN docker-php-ext-install mysqli` присутствует.
2. Неудачная установка расширения mysqli:
Если вы уверены, что расширение mysqli должно быть установлено в вашем образе PHP, то возможно оно не было установлено правильно. Попробуйте пересобрать образ, убедившись, что команда установки mysqli выполняется успешно.
3. Ошибки в настройках Docker-контейнера:
Проверьте файл php.ini в вашем контейнере и убедитесь, что расширение mysqli правильно активировано. Вы можете добавить следующую строку в php.ini:
```
extension=mysqli.so
```
4. Проблемы с сетевым подключением:
Иногда проблема может быть связана с сетевым подключением в Docker. Убедитесь, что ваш контейнер имеет доступ к интернету и может загрузить необходимые файлы для установки расширения mysqli.
5. Обновление образа PHP:
Если все вышеперечисленные способы не помогли, попробуйте обновить образ PHP до последней версии. Возможно, проблема была исправлена в более новой версии образа.
Надеюсь, что один из этих способов поможет вам решить проблему с установкой mysqli в Docker. Если проблема останется, пожалуйста, предоставьте больше информации о вашей конфигурации Docker и коде, чтобы мы могли помочь вам более точно.