Docker中的MySQL返回“;服务器请求的身份验证方法客户端未知;

Docker中的MySQL返回“;服务器请求的身份验证方法客户端未知;,mysql,docker,symfony4,Mysql,Docker,Symfony4,我为symfony4项目使用DockerWeb堆栈。MySQL配置为: mysql: image: mysql container_name: sf4_mysql volumes: - .docker/data/db:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: *** MYSQL_USER: ***

我为symfony4项目使用DockerWeb堆栈。MySQL配置为:

mysql:
    image: mysql
    container_name: sf4_mysql
    volumes:
        - .docker/data/db:/var/lib/mysql
    environment:
        MYSQL_ROOT_PASSWORD: root
        MYSQL_DATABASE: ***
        MYSQL_USER: ***
        MYSQL_PASSWORD: ***
从Docker Hub中提取的图像是MySQL 8,当我尝试使用
doctor:database:create创建数据库时,我收到以下消息:

2018-09-17T11:53:51+00:00[错误]运行命令“条令:数据库:创建”时引发错误。消息:“驱动程序SQLSTATE[HY000][2054]中发生异常,服务器请求身份验证 “客户不知道的方法”

在AbstractMySQLDriver.php第126行中:

驱动程序SQLSTATE[HY000][2054]中发生异常。服务器请求客户端未知的身份验证方法

在PDOConnection.php第50行中:

SQLSTATE[HY000][2054]服务器请求的身份验证方法客户端未知

在PDOConnection.php第46行中:

SQLSTATE[HY000][2054]服务器请求的身份验证方法客户端未知

在PDOConnection.php第46行中:

PDO::_构造():服务器请求的身份验证方法客户端未知[缓存_sha2_密码]

MySQL 8.0使用“可插拔身份验证”-您可以通过以下步骤解决此问题

  • 打开my.cnf并添加以下条目(并重新启动MySQL)

    [mysqld]

    默认\u身份验证\u插件=mysql\u本机\u密码

  • 使用正确的8.0语法创建一个用户(您的MYSQL\u用户名)以生成密码(见下文)

    使用mysql\u本机\u密码标识


  • 冲洗pivileges,然后重试。这就可以了。

    只需更新docker compose文件,如下所示,然后重建图像

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