Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Uncaught PDOException: could not find driver inside docker container

I am get a driver exception whilst trying to use pdo from inside my docker container. My image installs php7.1 along with enabling the pdo_mysql extension. The db credentials also correct, but I'm not sure why I am still this driver exception: PHP Fatal error: Uncaught PDOException: could not find driver in /var/www/app/test.php:9

Do I need to enable any other extensions?

Dockerfile

FROM ubuntu:xenial

# install dependencies
RUN apt-get update
RUN apt-get install -y software-properties-common python-software-properties
RUN apt-get install -y language-pack-en-base
RUN LC_ALL=en_US.UTF-8 add-apt-repository ppa:ondrej/php

# setup php
RUN apt-get update && \
    apt-get install -y nginx \
    php7.1 \
    php7.1-fpm \
    php7.1-cli \
    php7.1-common \
    php7.1-json \
    php7.1-opcache \
    php7.1-mysql \
    php7.1-mbstring \
    php7.1-gd \
    php7.1-imap \
    php7.1-ldap \
    php7.1-dev \
    php7.1-intl \
    php7.1-gd \
    php7.1-curl \
    php7.1-zip \
    php7.1-xml \
    curl

RUN phpenmod pdo_mysql

EXPOSE 8000

ENTRYPOINT ["/bin/sh", "./entrypoint.sh"]

docker-compose.yml

version: "3"
services:
  app:
    image: app:latest
    command: start
    ports:
      - 8000:8000
    links:
      - db
    environment:
      DB_DATABASE: mydb
      DB_HOST: db
      DB_USER: app_user
      DB_PASSWORD: abc123

  db:
    image: mysql:5.7
    environment:
      MYSQL_DATABASE: mydb
      MYSQL_USER: app_user
      MYSQL_PASSWORD: abc123
      MYSQL_ROOT_PASSWORD: abc123
    ports:
      - 3306:3306

test.php

<?php

require_once('vendor/autoload.php');

use PDO;

$dns = ":host=".getenv('DB_HOST')."; dbname=".getenv('DB_DATABASE');

echo new PDO($dns, getenv('DB_USER'), getenv('DB_PASSWORD'));
like image 632
Freid001 Avatar asked Nov 04 '25 07:11

Freid001


1 Answers

I think your problem is on the $dns variable, you have to define the DB driver (mysql in your case).

$dns = "mysql:host=".getenv('DB_HOST')."; dbname=".getenv('DB_DATABASE');

like image 182
Miguel Avatar answered Nov 06 '25 00:11

Miguel



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!