Я хочу запустить php-fpm в контейнере докеров, но после запуска контейнера получаю сообщение об ошибке:
Неустранимая ошибка: Uncaught PDOException: не удалось найти драйвер.
Я использую php7.4 с механизмом событий и базой данных postgres в отдельном контейнере (я использую docker-compose для их запуска) и работаю над ubuntu20.04.
Странно то, что мои коллеги установили то же самое без этой ошибки, поэтому ошибка не может быть связана с неправильным файлом докера.
Что я пробовал до сих пор:
pdo
и pdo_pgsql
.Ошибка относится к этому методу:
public function pdoConnection(): PDO
{
/** @var PDO $pdo */
$pdo = $this->makeSingleton(PDO::class, function () {
$this->assertMandatoryConfigExists('pdo.dsn');
$this->assertMandatoryConfigExists('pdo.user');
$this->assertMandatoryConfigExists('pdo.pwd');
return new PDO(
$this->config()->stringValue('pdo.dsn'),
$this->config()->stringValue('pdo.user'),
$this->config()->stringValue('pdo.pwd'),
[
// the next line is the line the error message refers to
PDO::ATTR_PERSISTENT => true,
// This is necessary due to the way pgBouncer handles (or not handles) prepared statements.
// See https://www.pgbouncer.org/faq.html#how-to-use-prepared-statements-with-transaction-pooling
PDO::ATTR_EMULATE_PREPARES => true,
]
);
});
return $pdo;
}
Я проверил pdo.dns
, pdo.user
и pdo.pwd
, они все правильные. Я определил DNS через
DNS = "pgsql:host=HOSTNAME port=5432 dbname=DATABASENAME"
Файл докера включает
docker-php-ext-install pdo_pgsql
В вашем файле докера попробуйте добавить код ниже:
docker-php-ext-install \
pdo_pgsql
Надеюсь помочь вам.
@Julia Не могли бы вы показать свой файл докеров?
Это была строка DNS, кавычки неправильные. С этим работает:
DNS = pgsql:host=HOSTNAME;port=5432;dbname=DATABASENAME
Это уже присутствует в файле докера