«PDOException: не удалось найти драйвер» внутри контейнера докеров, где существуют модули PDO

Я хочу запустить php-fpm в контейнере докеров, но после запуска контейнера получаю сообщение об ошибке:

Неустранимая ошибка: Uncaught PDOException: не удалось найти драйвер.

Я использую php7.4 с механизмом событий и базой данных postgres в отдельном контейнере (я использую docker-compose для их запуска) и работаю над ubuntu20.04.

Странно то, что мои коллеги установили то же самое без этой ошибки, поэтому ошибка не может быть связана с неправильным файлом докера.

Что я пробовал до сих пор:

  • Я могу подключиться к базе данных с помощью psql из оболочки.
  • Я распечатал все модули, загруженные в контейнер, включая 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
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
992
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

В вашем файле докера попробуйте добавить код ниже:

docker-php-ext-install \
        pdo_pgsql

Надеюсь помочь вам.

Это уже присутствует в файле докера

Julia 15.12.2020 15:31

@Julia Не могли бы вы показать свой файл докеров?

Dmitry 15.12.2020 16:01
Ответ принят как подходящий

Это была строка DNS, кавычки неправильные. С этим работает:

DNS = pgsql:host=HOSTNAME;port=5432;dbname=DATABASENAME

Другие вопросы по теме