Docker Laravel Mysql:找不到驱动程序

Posted

技术标签:

【中文标题】Docker Laravel Mysql:找不到驱动程序【英文标题】:Docker Laravel Mysql: could not find driver 【发布时间】:2019-11-07 14:56:42 【问题描述】:

当我运行docker-compose up 并执行一些composer 命令时,我得到了错误

在 Connection.php 第 664 行:找不到驱动程序(SQL:从 users 中选择 idname 在 Connector.php 第 68 行:找不到驱动程序...

为什么 Laravel 连接不上 mysql?我可以在docker-compose exec web bash 中做mysql -h db 并且它有效。

我的设置

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(我在 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

【问题讨论】:

更改 DB_CONNECTION=mysql -> DB_CONNECTION=mysqli 应该很有帮助.. 因为 mysql 已被弃用 可能重复:***.com/questions/50220506/…***.com/questions/51982770/… @RaymondNijland 不用担心。我必须自己仔细检查配置。 看看***.com/questions/41955914/…是否解决了问题。 你试过docker-php-ext-install mysql mysqli pdo pdo_mysql的所有选项吗? 【参考方案1】:

按照@NigelRen 的建议将RUN docker-php-ext-install mysqli pdo pdo_mysql(不带mysql)添加到Dockerfile 解决了这个错误。

【讨论】:

【参考方案2】:

尝试使用以下命令安装 php-mysql sudo apt-get install php-mysql 并重新启动服务器

【讨论】:

不适用于E: Unable to locate package php7.2-mysqlE: Package 'php-mysql' has no installation candidate 对于php-mysql 您的系统没有下载此软件包的源/存储库。重新添加 repo 并重试。 @AndrewG。如果我这样做 LC_ALL=C.UTF-8 add-apt-repository ppa:ondrej/php 它会显示 gpg: no valid OpenPGP data found. 你知道如何解决这个问题吗? 为什么推荐安装php-mysql 因为我认为他的 docker 容器中没有 php MySQL 扩展

以上是关于Docker Laravel Mysql:找不到驱动程序的主要内容,如果未能解决你的问题,请参考以下文章

PHP 7.0 上的 Laravel 5.4:PDO 异常 - 找不到驱动程序 (MySQL)

Ubuntu 14.04.2 Laravel 4.2.0 PDOException 找不到驱动程序 MySQL

在 Docker 中找不到 MySQL 的 mysql_config [重复]

Docker,MySQL - 在 .sh 文件中找不到命令

Redis + Docker:PDOException:找不到驱动程序

Ubuntu 14.04.2 Laravel 4.2.0 PDOException找不到驱动程序MySQL