首页 > 解决方案 > Docker / WSL / Symfony / MySQL - SQLSTATE [HY000] [2002] 连接被拒绝

问题描述

我正在使用 WSL 2 并尝试通过我的 docker 应用程序容器(Symfony 4.4)连接到我的 MySQL 数据库。关于这个主题的其他帖子没有帮助我找到解决方案,这就是我现在问你的原因。不要犹豫,让我添加其他文件,这可以帮助我们获取有关此问题的更多信息。

所有容器表面上都运行良好(详见此处)。

然后我进入我的应用程序容器docker exec -it app-backend-fairfair bash并成功运行composer install。它工作正常(细节在这里)。

最后我运行php bin/console doctrine:database:create了,但即使我通过 localhost:8081 上的管理员拥有完整的数据库访问权限,它也无法工作,我仍然收到SQLSTATE[HY000] [2002] Connection refused错误消息。完整的错误信息在这里


使用的文件

这是我的 docker .env 文件:

SERVER_PORT=8080
ADMINER_PORT=8081

# name and group of your user
HOST_USER=shamzic

# Path to store data in your machine
MYSQL_VOLUME=/var/docker-volume/fairfair/database

# Password for root user
MYSQL_ROOT_PASSWORD=root

在 .env symfony 容器文件中:

...

DATABASE_URL=mysql://root:root@db:3306/main
...

docker-compose.yaml 文件:

version: '3.2'

services:
    app-backend-fairfair:
        build:
            context: .
            dockerfile: app.dockerfile
            args:
                USER: ${HOST_USER}
        volumes:
            - '../../:/usr/src/backend-fairfair'
        networks:
            - app-backend-fairfair
            - db
        restart: on-failure
        container_name: app-backend-fairfair
    server-backend-fairfair:
        build:
            context: .
            dockerfile: server.dockerfile
        networks:
            - app-backend-fairfair
        ports:
            - ${SERVER_PORT}:80
        restart: on-failure
        depends_on:
            - app-backend-fairfair
        container_name: server-backend-fairfair
    db:
        image: mysql:8.0
        build:
            context: .
            dockerfile: database.dockerfile
        volumes:
            - ${MYSQL_VOLUME}:/var/lib/mysql
        ports:
            - 3306:3306
        environment:
            MYSQL_ROOT_HOST: '%'
            MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
        networks:
            - db
        restart: on-failure
        container_name: db
    adminer:
        build:
            context: .
            dockerfile: adminer.dockerfile
        ports:
            - ${ADMINER_PORT}:8080
        restart: on-failure
        networks:
            - db
        depends_on:
            - db
        container_name: adminer
networks:
    app-backend-fairfair:
        name: app-backend-fairfair
    db:
        name: db

我确信这可以通过一些更改来解决......也许在 docker-compose.yaml 文件中?

预先感谢您的帮助!

标签: mysqldockersymfonywindows-subsystem-for-linux

解决方案


您的配置看起来不错,应该足以按预期工作。

该错误消息还表明网络设置正在运行,并且可以解析 db 主机,但它不接受连接。很可能数据库还没有准备好接受连接。只是等待它完成初始化可能就足够了。

因此,通过检查该服务的日志输出来验证该mysql服务是否已完成初始化:

docker-compose logs db

然后验证它是否接受本地接口/unix 套接字上的连接:

docker-compose exec db mysql -u root -proot

接下来,您可以验证 mysql 是否在其(从容器的角度)外部接口上接受连接:

docker-compose run --rm db mysql -h db -u root -proot

推荐阅读