Symfony4/Docker:SQLSTATE[HY000][2002]连接被拒绝

Symfony4/Docker:SQLSTATE[HY000][2002]连接被拒绝,docker,doctrine,docker-compose,symfony4,Docker,Doctrine,Docker Compose,Symfony4,我对Symfony 4和数据库连接有问题。 我尝试使用php-bin/console-make:migration进行迁移,但随后我遇到了连接被拒绝的错误 In AbstractMySQLDriver.php line 113: An exception occurred in driver: SQLSTATE[HY000] [2002] Connection refused In PDOConnection.php line 50: SQLSTATE[HY000] [200

我对Symfony 4和数据库连接有问题。 我尝试使用
php-bin/console-make:migration
进行迁移,但随后我遇到了连接被拒绝的错误

In AbstractMySQLDriver.php line 113:

  An exception occurred in driver: SQLSTATE[HY000] [2002] Connection refused  


In PDOConnection.php line 50:

  SQLSTATE[HY000] [2002] Connection refused  


In PDOConnection.php line 46:

  SQLSTATE[HY000] [2002] Connection refused  
我的.env文件如下所示

###> doctrine/doctrine-bundle ###
# Format described at http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/configuration.html#connecting-using-a-url
# For an SQLite database, use: "sqlite:///%kernel.project_dir%/var/data.db"
# Configure your db driver and server_version in config/packages/doctrine.yaml
DATABASE_URL=mysql://db_user:db_password@127.0.0.1:3306/db_name
DATABASE_USER=sf4user
DATABASE_PWD=sf4pwd
DATABASE_NAME=sf4
DATABASE_HOST=127.0.0.1
DATABASE_PORT=3306
###< doctrine/doctrine-bundle ###
据我所知,数据库URL是根据我在.env文件中设置的内容来解析的,但我无法使其正常工作,每当我尝试调用处理db的控制台方法时,都会出现连接被拒绝错误

我使用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
        container_name: sf4_mysql
        volumes:
            - .docker/data/db:/var/lib/mysql
        command: ["--default-authentication-plugin=mysql_native_password"]
        ports:
            - "3306:3306"
        environment:
            MYSQL_ROOT_PASSWORD: root_pwd_test
            MYSQL_DATABASE: sf4
            MYSQL_USER: sf4user
            MYSQL_PASSWORD: sf4pwd

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

    phpmyadmin:
        image: phpmyadmin/phpmyadmin
        container_name: sf4_phpmyadmin
        ports:
            - 8080:80
        links:
            - mysql
        environment:
            MYSQL_USERNAME: root
            MYSQL_ROOT_PASSWORD: root_pwd_test
            PMA_HOST: mysql
我会错过什么?

我通过以下方式解决了这个问题:

  • 降级到mysql 5.7
  • 从docker-compose.yml中删除命令:[“--default authentication plugin=mysql\u native\u password”]
  • 在.env文件中的数据库_URL中对凭据进行harcoding,并引用“mysql”(docker compose中的服务名称),而不是127.0.0.1
    • 数据库地址=mysql://sf4user:sf4password@mysql:3306/sf4

您确定您的服务器上安装了mysql吗?它正在监听3306端口吗?你有防火墙阻止连接吗?你确定你的用户名/密码是正确的吗?是的,所有这些都设置好了。我找到了一个解决方案(下一个详细答案)。thanxThis!使用服务名而不是127.0.0.1 make为我做到了这一点。
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
        container_name: sf4_mysql
        volumes:
            - .docker/data/db:/var/lib/mysql
        command: ["--default-authentication-plugin=mysql_native_password"]
        ports:
            - "3306:3306"
        environment:
            MYSQL_ROOT_PASSWORD: root_pwd_test
            MYSQL_DATABASE: sf4
            MYSQL_USER: sf4user
            MYSQL_PASSWORD: sf4pwd

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

    phpmyadmin:
        image: phpmyadmin/phpmyadmin
        container_name: sf4_phpmyadmin
        ports:
            - 8080:80
        links:
            - mysql
        environment:
            MYSQL_USERNAME: root
            MYSQL_ROOT_PASSWORD: root_pwd_test
            PMA_HOST: mysql