SQLSTATE[HY000] [2002] 连接被拒绝。 Laravel API 托管在 Docker 上,使用 WSL2 Ubuntu 18.04
SQLSTATE[HY000] [2002] Connection refused. Laravel API hosted on Docker with WSL2 Ubuntu 18.04
我正在尝试通过邮递员为我在 docker 中的 laravel 应用程序 运行 创建一个新项目。 docker 容器是通过提供开发环境的 ddev 自动生成的,运行 使用 WSL2 Ubuntu 18.04。所以这里有一个问题,我可以“php artisan migrate”就好了我什至可以“php artisan tinker”并创建一个很好但是当从我的主机通过邮递员发送请求时我得到这个错误.
Illuminate\Database\QueryException: SQLSTATE[HY000] [2002] Connection refused (SQL: select count(*) as aggregate from users
where id
= 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.实际上,除了本地主机之外,我在所有这些服务器上都遇到了相同的错误,这是有道理的。
- 强制 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
我正在尝试通过邮递员为我在 docker 中的 laravel 应用程序 运行 创建一个新项目。 docker 容器是通过提供开发环境的 ddev 自动生成的,运行 使用 WSL2 Ubuntu 18.04。所以这里有一个问题,我可以“php artisan migrate”就好了我什至可以“php artisan tinker”并创建一个很好但是当从我的主机通过邮递员发送请求时我得到这个错误.
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.实际上,除了本地主机之外,我在所有这些服务器上都遇到了相同的错误,这是有道理的。
- 强制 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