首页 > 解决方案 > SQLSTATE[HY000] [2002] 连接被拒绝。使用 WSL2 Ubuntu 18.04 托管在 Docker 上的 Laravel API

问题描述

我正在尝试通过邮递员为我在 docker 中运行的 laravel 应用程序创建一个新项目。docker 容器是通过 ddev 自动生成的,它提供了一个开发环境并使用 WSL2 Ubuntu 18.04 运行。所以这里有一个问题,我可以“php artisan migrate”就好了,我什至可以“php artisan tinker”创建一个就好了,但是当从我的主机通过邮递员发送请求时,我得到了这个错误。

Illuminate\Database\QueryException: SQLSTATE[HY000] [2002] Connection denied (SQL: select count(*) as aggregate from userswhere id= 1) in file /var/www/html/vendor/laravel/framework/src/Illuminate/Database /Connection.php 在第 671 行

我昨天用这个https://www.craigforrester.com/posts/windows-subsystem-for-linux-disable-ipv6-for-apt/解决了这个问题,但是当我今天再次遇到这个错误并且没有运气时尝试了它。

我尝试过的事情:

我的想法是: 我 99% 确定这不是凭据问题,更多的是路由问题,因为就像我在第一段中所说的那样,我可以从 WSL Ubuntu 迁移和创建。我认为路由问题要么是从我的主机到 WSL,要么是从 WSL 到 mysql。但话又说回来,我的请求似乎正在通过,否则我会遇到某种 PHP 连接错误,而不是 MySQL 连接错误

标签: mysqllaraveldockerubuntuwindows-subsystem-for-linux

解决方案


不久前我遇到了这个问题,结果证明我必须将 DB_HOST 设置为 docker mysql 容器的名称:-

docker-compose.yml:-

version: '3.1'

services:
    php:
        build:
            context: .
            dockerfile: .docker/Dockerfile
        image: larastock
        ports:
            - 8000:80
        restart: always
        volumes:
            - .:/var/www/html
        networks:
            - larastock
    mysql:
        image: mysql:8.0
        volumes:
            - db_data:/var/lib/mysql
        restart: always
        ports:
            - 3306:3306
        environment:
            MYSQL_DATABASE: larastock
            MYSQL_USER: root
            MYSQL_PASSWORD: password
            MYSQL_ROOT_PASSWORD: password
        networks:
            - larastock
    phpmyadmin:
        depends_on:
            - mysql
        image: phpmyadmin/phpmyadmin
        restart: always
        ports:
            - 8001:80
        environment:
            PMA_HOST: mysql
            MYSQL_ROOT_PASSWORD: password 
        networks:
            - larastock
networks:
    larastock:
volumes:
    db_data:

.env:-

DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=larastock
DB_USERNAME=root
DB_PASSWORD=password

推荐阅读