我正在尝试通过 postman 为我在 docker 中运行的 laravel 应用程序创建一个新项目。 docker 容器是通过提供开发环境的 ddev 自动生成的,并使用 WSL2 Ubuntu 18.04 运行。所以这里有一个问题,我可以很好地“php artisan migrate”我什至可以“php artisan tinker”并创建一个很好但是当从我的主机通过 postman 发送请求时我收到这个错误。
Illuminate\Database\QueryException: SQLSTATE[HY000] [2002] Connection refused (SQL: select count(*) as aggregate from
users
whereid
= 1) in file /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Connection.php on line 671
我昨天用这个 https://www.craigforrester.com/posts/windows-subsystem-for-linux-disable-ipv6-for-apt/ 解决了这个问题但是当我今天再次遇到这个错误时试了一下,但运气不好。
我尝试过的事情:
- 将 DB_HOST 设置为 127.0.0.1、wsl_ip、docker_gateway_ip、docker_mysql_ip、localhost、mysql。实际上,除了 localhost 之外,我在所有这些服务器上都遇到了相同的错误,这是有道理的。
- 强制 ipv4 https://www.craigforrester.com/posts/windows-subsystem-for-linux-disable-ipv6-for-apt/
- 更改 gai.conf 设置 https://www.reddit.com/r/bashonubuntuonwindows/comments/7u1le5/disable_ipv6_or_prefer_ipv4_first/
- 更改 grub 配置 https://askubuntu.com/questions/1046057/disabling-ipv6-in-ubuntu-server-18-04
我的想法: 我 99% 确定这不是凭据问题,更确切地说是路由问题,因为就像我在第一段中所说的那样,我可以从 WSL Ubuntu 迁移和创建。我认为路由问题要么是从我的主机到 WSL,要么是从 WSL 到 mysql。但是话又说回来,我的请求似乎正在通过,否则我会遇到某种 PHP 连接错误,而不是 MySQL 连接错误
最佳答案
不久前我遇到了这个问题,结果我必须将 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 - SQLSTATE[HY000] [2002] 连接被拒绝。使用 WSL2 Ubuntu 18.04 托管在 Docker 上的 Laravel API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63044191/