【问题标题】:SQLSTATE[HY000] [2002] Connection refused. Laravel API hosted on Docker with WSL2 Ubuntu 18.04SQLSTATE[HY000] [2002] 连接被拒绝。使用 WSL2 Ubuntu 18.04 托管在 Docker 上的 Laravel API
【发布时间】:2020-11-12 14:03:02
【问题描述】:

我正在尝试通过邮递员为我在 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 users where 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 连接错误

【问题讨论】:

    标签: mysql laravel docker ubuntu windows-subsystem-for-linux


    【解决方案1】:

    前段时间我遇到了这个问题,结果我不得不将 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
    

    【讨论】:

    • 非常感谢。所以我之前尝试过,但没有人澄清它应该是服务的名称,我认为“mysql”只是一些 laravel 变量或其他东西。由于我使用 ddev 我的 mysql 服务不称为 mysql。总之谢谢
    猜你喜欢
    • 2017-05-04
    • 2022-10-25
    • 2020-10-22
    • 2017-09-20
    • 2020-03-26
    • 2020-12-04
    • 2020-02-27
    • 2016-11-03
    • 1970-01-01
    相关资源
    最近更新 更多