驱动程序发生异常:SQLSTATE[HY000] [2002] 连接被拒绝。

10
我在使用Docker和Symfony访问MySQL时遇到了问题。
为了尝试通过连接到php容器来查询mysql,我执行了以下命令:
docker exec -it symfony_php bash
然后我执行了以下命令:
bin/console doctrine:database:create 这是我得到的错误信息:
An exception occurred in driver: SQLSTATE [HY000] [2002] Connection refused
这是我的“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

它涉及到 IT 技术。
5个回答

13

您尝试使用内部标识符作为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作为主机,因此这可能是正确的主机名。 - Dominic Wehrmann
1
是的,它与以下行一起很好地工作: DATABASE_URL = mysql: // root: root symfony_mysql: 3306 / s4非常感谢! - BibDev

4

使用此命令获取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地址


我还不得不将 mysql 更改为 mysqli。谢谢,这帮了很大的忙。 - temo

0

您正在尝试连接到 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): Access denied for user 'root'@'localhost' (using password: YES)所以我输入了密码:“root”,然后我可以毫无问题地访问mysql。因此,我认为在这个级别上没有问题。 - BibDev

0

我的问题是Docker网络无法工作。

我重新创建了Docker网络和所有容器,这帮助了我。

以下是一个示例,可以删除容器和网络并重新创建它们。

docker-compose down 
docker-compose up -d

-2
请检查XAMPP是否正常工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接