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

KaL*_*aKi 4 mysql symfony docker

我在使用 docker 和 symfony 访问 mysql 时遇到问题。

要尝试通过连接到 php 容器来查询 mysql:

docker exec -it symfony_php bash

然后我执行以下命令:

bin/console 原则:数据库:创建

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

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

这是我的“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
Run Code Online (Sandbox Code Playgroud)

这是我的 .env 的代码:

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

小智 5

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

DATABASE_URL=mysql://root:root@symfony_mysql:3306/s4
DATABASE_URL=mysql://root:root@mysql:3306/s4
Run Code Online (Sandbox Code Playgroud)

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

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


小智 5

使用此命令获取ip地址

docker inspect mysql | grep IPAddress
Run Code Online (Sandbox Code Playgroud)

那么例如:

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
Run Code Online (Sandbox Code Playgroud)

或者用容器的名称代替 ip 地址