php - Symfony 4 Doctrine无法连接到Docker MySQL

标签 php mysql symfony docker symfony4

即使我可以使用PMA以相同的凭据进行连接,Symfony似乎也无法连接到数据库。

docker-compose.yml:

version: '3'
services:
apache:
    build: .docker/apache
    container_name: sf4_apache
    ports:
      - 80:80
    volumes:
      - .docker/config/vhosts:/etc/apache2/sites-enabled
      - .:/home/wwwroot/sf4
    depends_on:
      - php

mysql:
  image: mysql
  command: "--default-authentication-plugin=mysql_native_password"
  container_name: sf4_mysql
  restart: always
  volumes:
    - ./data/db/mysql:/var/lib/mysql
  environment:
    MYSQL_ROOT_PASSWORD: root
    MYSQL_DATABASE: sf4
    MYSQL_USER: sf4
    MYSQL_PASSWORD: sf4

php:
    build: .docker/php
    container_name: sf4_php
    volumes:
      - .:/home/wwwroot/sf4
    environment:
      - maildev_host=sf4_maildev
    depends_on:
      - maildev
      - mysql
    links:
      - mysql

phpmyadmin:
  image: phpmyadmin/phpmyadmin
  container_name: sf4_phpmyadmin
  environment:
    PMA_HOST: mysql
    PMA_PORT: 3306
  ports:
    - 8080:80
  links:
    - mysql

maildev:
    image: djfarrelly/maildev
    container_name: sf4_maildev
    ports:
      - 8001:80

Symfony .env:
DATABASE_URL=mysql://root:root@mysql:3306/sf4

我需要重新配置我的Doctrine文件吗?当前是默认值:
doctrine:
dbal:
    # configure these for your database server
    driver: 'pdo_mysql'
    server_version: '5.7'
    charset: utf8mb4
    default_table_options:
        charset: utf8mb4
        collate: utf8mb4_unicode_ci

    url: '%env(resolve:DATABASE_URL)%'

错误是:

An exception occurred in driver: could not find driver



正如我所说,我可以使用root @ root凭据通过phpMyAdmin连接到数据库。

在与数据库建立连接之前,这是Connection.php文件中的变量$ this-> params:
 ["driver"]=>
  string(9) "pdo_mysql"
  ["charset"]=>
  string(7) "utf8mb4"
  ["url"]=>
  string(32) "mysql://root:root@mysql:3306/sf4"
  ["host"]=>
  string(5) "mysql"
  ["port"]=>
  string(4) "3306"
  ["user"]=>
  string(4) "root"
  ["password"]=>
  string(4) "root"
  ["driverOptions"]=>
  array(0) {
  }
  ["serverVersion"]=>
  string(6) "8.0.15"
  ["defaultTableOptions"]=>
  array(2) {
    ["charset"]=>
    string(7) "utf8mb4"
    ["collate"]=>
    string(18) "utf8mb4_unicode_ci"
  }
  ["dbname"]=>
  string(3) "sf4"

最佳答案

试试这个 :

doctrine:
    dbal:
        # configure these for your database server
        driver: 'pdo_mysql'
        server_version: '8.0.15'
        charset: utf8mb4
        default_table_options:
            charset: utf8mb4
            collate: utf8mb4_unicode_ci

        url: '%env(resolve:DATABASE_URL)%'

mysql镜像是mysql的最新版本。

PHP镜像缺少pdo_mysql驱动程序

应该将其添加到Dockerfile中,如下所示:
RUN docker-php-ext-install pdo pdo_mysql zip

之后,必须使用以下命令重建镜像:
docker-compose build

关于php - Symfony 4 Doctrine无法连接到Docker MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55560003/

相关文章:

php - 在 Doctrine flush 中插入前删除

java - 如何做 PHP explode (", "), list(), foreach() in Java style

php - UTF 8 编码在 PHP 中无法正常工作

mysql - MySQL 中的 INT 数据类型

mysql - 按时间分组,但不使用特定的表列?

php - 如果当前输入中没有则删除表条目

symfony2 如何创建自己的自定义 yml 文件以在全局共享?

mysql - Symfony2 - Doctrine :schema:create Access denied for user

php - wamp 上的 SSL 证书错误

php - MySQL数据库复制方法