Как правильно загрузить расширение mongodb для PHP-fpm в Docker?
Здравствуйте. Хочу подключить mongodb в докере (вместе с php-fpm), но получаю Warning:
Warning: PHP Startup: Unable to load dynamic library 'mongodb.so WORKDIR /var/www/project' (tried: mongodb.so WORKDIR /var/www/project (mongodb.so WORKDIR /var/www/project: cannot open shared object file: No such file or directory), /usr/local/lib/php/extensions/no-debug-non-zts-20220829/mongodb.so WORKDIR /var/www/project.so (/usr/local/lib/php/extensions/no-debug-non-zts-20220829/mongodb.so WORKDIR /var/www/project.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 PHP 8.2.8 (cli) (built: Jul 10 2023 22:00:15) (NTS) |
Warning: PHP Startup: Unable to load dynamic library 'mongodb.so WORKDIR /var/www/project' (tried: mongodb.so WORKDIR /var/www/project (mongodb.so WORKDIR /var/www/project: cannot open shared object file: No such file or directory), /usr/local/lib/php/extensions/no-debug-non-zts-20220829/mongodb.so WORKDIR /var/www/project.so (/usr/local/lib/php/extensions/no-debug-non-zts-20220829/mongodb.so WORKDIR /var/www/project.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 PHP 8.2.8 (cli) (built: Jul 10 2023 22:00:15) (NTS)
Файл mongodb.so есть в
/usr/local/lib/php/extensions/no-debug-non-zts-20220829 |
/usr/local/lib/php/extensions/no-debug-non-zts-20220829
В Dockerfile
... && pecl install mongodb && docker-php-ext-enable mongodb && echo "extension=mongodb.so" >> /usr/local/etc/php/php.ini |
... && pecl install mongodb && docker-php-ext-enable mongodb && echo "extension=mongodb.so" >> /usr/local/etc/php/php.ini
Делаю php -i | grep "Loaded Configuration File", выдает
Loaded Configuration File => /usr/local/etc/php/php.ini |
Loaded Configuration File => /usr/local/etc/php/php.ini
Все ini файлы это:
"/usr/local/etc/php/conf.d/mongo.ini
/usr/local/etc/php/conf.d/docker-php-ext-zip.ini
/usr/local/etc/php/conf.d/docker-php-ext-opcache.ini
/usr/local/etc/php/conf.d/docker-php-ext-pdo_mysql.ini
/usr/local/etc/php/conf.d/docker-php-ext-intl.ini
/usr/local/etc/php/conf.d/docker-php-ext-apcu.ini
/usr/local/etc/php/conf.d/docker-fpm.ini
/usr/local/etc/php/conf.d/docker-php-ext-sodium.ini
/usr/local/etc/php/php.ini
"
Может для php-fpm где то другой ini есть, в котором надо как-то поправить путь к mongodb?
Дополнительно:
echo "extension=mongodb.so" >> /usr/local/etc/php/php.ini |
echo "extension=mongodb.so" >> /usr/local/etc/php/php.ini
Это писать не обязательно, у вас уже вызывается docker-php-ext-enable
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос

Для загрузки расширения mongodb для PHP-fpm в Docker, вам потребуется создать Dockerfile и настроить его таким образом, чтобы расширение mongodb было установлено и доступно в PHP-fpm контейнере.
Вот пример Dockerfile, который позволит вам загрузить расширение mongodb для PHP-fpm:
# Use an official PHP-fpm image as a base FROM php:fpm # Install the mongodb extension RUN pecl install mongodb \ && docker-php-ext-enable mongodb # Restart PHP-fpm to apply changes RUN service php7.4-fpm restart# Use an official PHP-fpm image as a base FROM php:fpm # Install the mongodb extension RUN pecl install mongodb \ && docker-php-ext-enable mongodb # Restart PHP-fpm to apply changes RUN service php7.4-fpm restart
В этом Dockerfile мы используем официальный образ PHP-fpm в качестве базового образа. Затем с помощью команды `pecl install` мы устанавливаем расширение mongodb, а затем с помощью `docker-php-ext-enable` делаем его доступным для использования в PHP-fpm. Наконец, мы перезапускаем PHP-fpm, чтобы применить изменения.
После того как вы создадите Dockerfile, вы можете собрать образ с помощью команды `docker build -t my-php-fpm .` и запустить контейнер с расширением mongodb с помощью команды `docker run -d my-php-fpm`.
Теперь у вас должен быть контейнер PHP-fpm с установленным расширением mongodb, который готов к использованию.