代码之家  ›  专栏  ›  技术社区  ›  The50

Symfony 4无法连接到Docker MySQL

  •  0
  • The50  · 技术社区  · 7 年前

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

    docker撰写。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
    

    西蒙尼。环境:

    DATABASE_URL=mysql://root:root@mysql:3306/sf4
    

    我必须重新配置我的条令文件吗?目前它是默认的:

    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)%'
    

    错误是:

    驱动程序中发生异常:找不到驱动程序

    正如我所说,我可以通过phpMyAdmin使用root@root资格证书

    这是可变的$This->来自连接的参数。连接到数据库之前的php文件:

     ["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"
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   ibou888    7 年前

    只需更换 mysql 通过 sf4_mysql 因为您必须在主机中应用容器名称(容器名称:sf4\u mysql) ==>

    数据库地址=mysql://root:root@mysql:3306/sf4 通过 数据库地址=mysql://root:root@sf4_mysql:3306/sf4

        2
  •  1
  •   Abdelkarim EL AMEL    7 年前

    试试这个:

    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
    
    推荐文章