17

When I run docker-compose up and do some composer commands, I get error

In Connection.php line 664: could not find driver (SQL: select id, name from users In Connector.php line 68: could not find driver ...

Why cant Laravel connect to mysql? I can do mysql -h db in docker-compose exec web bash and it works.

My setup

docker-compose.yml

version: '3'

services:
  web:
    build: ./webserver
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - //docker/dockertest/webserver/app:/var/www/vhosts/app
    links:
      - db
    command:
       - /usr/local/bin/apache2_install_composer_dependencies.sh

  db:
    image: mysql:8.0
    container_name: db
    ports:
      - "3306:3306"
    command: --default-authentication-plugin=mysql_native_password
    environment:
      MYSQL_DATABASE: myDb
      MYSQL_USER: user
      MYSQL_PASSWORD: test
      MYSQL_ROOT_PASSWORD: test
    volumes:
      - //docker/dockertest/install/db_dump:/docker-entrypoint-initdb.d
      - persistent:/var/lib/mysql
    networks:
      - default

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    links:
      - db:db
    ports:
      - 8000:80
    environment:
      MYSQL_USER: user
      MYSQL_PASSWORD: test
      MYSQL_ROOT_PASSWORD: test



volumes:
  persistent:

Laravel .env (I reference these values in config/database.php)

...
DB_CONNECTION=mysql
#host points to Docker container
DB_HOST=db
DB_PORT=3306
DB_DATABASE=myDb
DB_USERNAME=user
DB_PASSWORD=test
....

webserver/Dockerfile

FROM php:7.2.19-apache-stretch

# Configure Apache server
COPY config_apache/sites-available /etc/apache2/sites-available

# Create symlink in sites-enabled
WORKDIR /etc/apache2/sites-enabled
RUN ln -s /etc/apache2/sites-available/app.conf app.conf

RUN mkdir -p /var/www/vhosts/app/logs

COPY /build_files/install_composer_dependencies.sh /usr/local/bin/apache2_install_composer_dependencies.sh

RUN apt-get update -y && apt-get install -y  curl nano libapache2-mod-geoip git zip unzip mysql-client

# Install Composer
RUN curl -o /tmp/composer-setup.php https://getcomposer.org/installer \
&& curl -o /tmp/composer-setup.sig https://composer.github.io/installer.sig \
# Verify installer
&& php -r "if (hash('SHA384', file_get_contents('/tmp/composer-setup.php')) !== trim(file_get_contents('/tmp/composer-setup.sig'))) { unlink('/tmp/composer-setup.php'); echo 'Invalid installer' . PHP_EOL; exit(1); }" \
&& php /tmp/composer-setup.php --no-ansi --install-dir=/usr/local/bin --filename=composer --snapshot \
&& rm -f /tmp/composer-setup.*

RUN a2enmod rewrite
RUN a2enmod geoip
RUN service apache2 restart
12
  • Changing DB_CONNECTION=mysql -> DB_CONNECTION=mysqli should most likely help.. As mysql is deprecated Commented Jun 25, 2019 at 17:58
  • 1
    Possible duplicates: stackoverflow.com/questions/50220506/… stackoverflow.com/questions/51982770/… Commented Jun 25, 2019 at 18:02
  • 1
    @RaymondNijland No worries. I had to double-check the config myself. Commented Jun 25, 2019 at 18:06
  • 1
    See if stackoverflow.com/questions/41955914/… solves the problem. Commented Jun 25, 2019 at 18:39
  • 3
    Have you tried with all of the options docker-php-ext-install mysql mysqli pdo pdo_mysql? Commented Jun 25, 2019 at 18:53

2 Answers 2

38

Adding RUN docker-php-ext-install mysqli pdo pdo_mysql (without mysql) to Dockerfile as @NigelRen suggested resolved this error.

Sign up to request clarification or add additional context in comments.

Comments

6

try to install php-mysql with following command sudo apt-get install php-mysql and restart your server

5 Comments

Does not work E: Unable to locate package php7.2-mysql and E: Package 'php-mysql' has no installation candidate for php-mysql
Your system does not have a source/repository from where to download this package. Re-add the repo and try again.
@AndrewG. If I do LC_ALL=C.UTF-8 add-apt-repository ppa:ondrej/php it says gpg: no valid OpenPGP data found. Do you know how to resolve this issue?
Why do you recommend to install php-mysql?
because I think that he haven't php MySQL extension in his docker container

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.