mysql - 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
users
whereid
= 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/解决了这个问题,但是当我今天再次遇到这个错误并且没有运气时尝试了它。
我尝试过的事情:
- 将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
推荐阅读
- amazon-web-services - 是否可以在无服务器框架中分离我的代码和基础设施?
- openvas - OpenVAS:OSPD 扫描仪不能用作新任务中的扫描仪
- arcgis-js-api - ARCGIS API 4 -- 每个点或地址的自定义标记图像
- javascript - 深度数组上的 JavaScript 深度扩展运算符
- jquery - JQUERY - 获取指定类的 p 标签文本并将其放入 textarea
- gpu - 深度学习硬件
- r - 在 sapply 中使用 rep 根据另一个向量拉伸一个向量
- testing - 在 Rest Assured json 正文中匹配长值的问题
- c# - 在 IIS 中托管后出现以下异常
- android - 使用 ListView 中的 CheckBox 和使用 Options Menu Item 删除多个项目