I'm new to Docker. I saw a few similar topics on stackoverflow, but non of the solution posted there helped me.
I have a Dockerfile:
FROM php:8.1.10-apache
RUN apt-get update
RUN docker-php-ext-install mysqli pdo pdo_mysql
COPY php.ini /usr/local/etc/php
RUN service apache2 restart
and a docker-compose.yml file:
version: '3'
services:
php:
build:
context: .
dockerfile: Dockerfile
ports:
- "80:80"
volumes:
- C:\apps\doc\src:/var/www/html
- C:\apps\doc\php.ini:/usr/local/etc/php/php.ini
db:
image: mysql:5.7
# NOTE: use of "mysql_native_password" is not recommended: https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password
# (this is just an example, not intended to be a production configuration)
command: --default-authentication-plugin=mysql_native_password
restart: always
environment:
MYSQL_ROOT_PASSWORD: example
adminer:
image: adminer
restart: always
ports:
- "8080:8080"
As you can see, pdo_mysql should be installed by Docker, but it't not. Function extension_loaded('pdo_mysql')
in php returns false. The extension is enabled in php.ini:
extension=pdo_mysql
The php.ini file is working correctly (I changed some other value like max_execution_time for example, and it's updated in phpinfo(), so php.ini seems to work).
It looks like this extension is not "not enabled" but not installed at all.
php -m
command gives me result like this:
PHP Warning: PHP Startup: Unable to load dynamic library 'pdo_mysql' (tried: /usr/local/lib/php/extensions/no-debug-non-zts-20210902/pdo_mysql (/usr/local/lib/php/extensions/no-debug-non-zts-20210902/pdo_mysql: cannot open shared
object file: No such file or directory), /usr/local/lib/php/extensions/no-debug-non-zts-20210902/pdo_mysql.so (/usr/local/lib/php/extensions/no-debug-non-zts-20210902/pdo_mysql.so: cannot open shared object file: No such file or
directory)) in Unknown on line 0
Warning: PHP Startup: Unable to load dynamic library 'pdo_mysql' (tried: /usr/local/lib/php/extensions/no-debug-non-zts-20210902/pdo_mysql (/usr/local/lib/php/extensions/no-debug-non-zts-20210902/pdo_mysql: cannot open shared obje
ct file: No such file or directory), /usr/local/lib/php/extensions/no-debug-non-zts-20210902/pdo_mysql.so (/usr/local/lib/php/extensions/no-debug-non-zts-20210902/pdo_mysql.so: cannot open shared object file: No such file or direc
tory)) in Unknown on line 0
[PHP Modules]
Core
ctype
curl
date
dom
fileinfo
filter
ftp
hash
iconv
json
libxml
mbstring
mysqli
mysqlnd
openssl
pcre
PDO
pdo_sqlite
Phar
posix
readline
Reflection
session
SimpleXML
sodium
SPL
sqlite3
standard
tokenizer
xml
xmlreader
xmlwriter
zlib
[Zend Modules]
UPDATE:
When I manually run docker-php-ext-install pdo_mysql
inside container and then run docker-compose restart
it works. But why isn't it installed by Docker automatically?