【问题标题】:An exception occurred in driver: SQLSTATE[HY000] [2002] Connection refused驱动程序发生异常:SQLSTATE[HY000] [2002] Connection denied
【发布时间】:2019-03-01 07:14:10
【问题描述】:

docker 和 symfony 访问 mysql 有问题。

尝试连接php容器查询mysql:

docker exec -it symfony_php bash

然后我执行以下命令:

bin/控制台原则:数据库:创建

这是我收到以下错误消息的地方:

驱动发生异常:SQLSTATE [HY000] [2002] Connection denied

这是我的“docker-compose.yml”的代码:

version: '3'
services:
    apache:
        container_name: symfony_apache
        build: .docker/apache
        ports:
            - "80:80"
        volumes:
            - .docker/config/vhosts:/etc/apache2/sites-enabled
            - .:/home/www/symfony
        depends_on:
          - php

    mysql:
        container_name: symfony_mysql
        image: mysql
        ports:
            - "3306:3306"   
        volumes:
            - .docker/data/db:/var/lib/mysql
        environment:
            MYSQL_ROOT_PASSWORD: root
            MYSQL_DATABASE: sf4
            MYSQL_USER: sf4
            MYSQL_PASSWORD: sf4

    php:
        container_name: symfony_php
        build: .docker/php
        volumes:
            - .:/home/www/symfony
        depends_on:
            - mysql 

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

这是我的 .env 的代码:

DATABASE_URL=mysql://root:root@127.0.0.1:3306/s4

【问题讨论】:

    标签: mysql symfony docker


    【解决方案1】:

    您正在尝试连接到 root:root,但您的用户是 sf4。试试:

    DATABASE_URL=mysql://sf4:sf4@127.0.0.1:3306/s4
    

    也可以尝试从命令行连接,以确保它确实在工作。

    编辑:刚刚意识到Connection refused 通常是在它不运行时,而不是用户/密码错误。检查 MySQL 是否正在运行。

    【讨论】:

    • 我尝试在我的 docker 容器中连接到 mysql:symfony_mysql,使用以下命令:docker exec -it symfony_mysql bash 然后:mysql 这就是它向我展示的内容:root @ 099870f6d0fd: / # mysql ERROR 1045 ( 28000):用户'root'@'localhost'的访问被拒绝(使用密码:YES)所以我输入了密码:“root”然后我可以毫无问题地访问mysql。所以我认为在这个层面上是没有问题的。
    【解决方案2】:

    您是否尝试使用内部标识符作为 mysql 主机?

    DATABASE_URL=mysql://root:root@symfony_mysql:3306/s4
    DATABASE_URL=mysql://root:root@mysql:3306/s4
    

    我认为 127.0.0.1 不能在容器内工作。

    您也可以尝试使用您的“外部”IP 或 URL,因为您已经暴露了 3306 端口。

    【讨论】:

    • phpmyadmin 使用 mysql 作为主机,所以这可能是正确的主机名。
    • 是的,它适用于以下行:DATABASE_URL = mysql: // root: root symfony_mysql: 3306 / s4 非常感谢!
    【解决方案3】:

    使用该命令获取ip地址

    docker inspect mysql | grep IPAddress
    

    那么例如:

    DATABASE_URL=mysql://root:@the ip adress:3306/dbname?serverVersion=5.7
    DATABASE_URL=mysql://root:@172.17.0.3:3306/test?serverVersion=5.7
    

    或者用容器名代替 IP 地址

    【讨论】:

      猜你喜欢
      • 2021-11-19
      • 2020-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-14
      • 2023-04-02
      • 2017-07-08
      相关资源
      最近更新 更多