Laravel Sail容器部署应用无法连接MySQL问题及解决
Laravel Docker容器部署数据库连接拒绝问题解决
在Windows 11系统中通过Docker容器部署Laravel应用,访问localhost/posts时出现数据库连接拒绝错误:
SQLSTATE[HY000] [2002] Connection refused
SELECT * FROMposts
数据库中已存在posts表,且可在WSL终端正常执行php artisan migrate命令。相关配置如下:
- /posts对应的Blade模板:
@extends('app') @section('content') <h1>Posts index page</h1> @forelse ($posts as $post) <h2>{{ $post->title }}</h2> @empty <h2>No posts!</h2> @endforelse @endsection
- web.php路由配置:
Route::resource('/posts', PostController::class)->only(['index', 'store']);
- PostController的index方法:
public function index() { $posts = Post::all(); return view('posts.index', compact('posts')); }
- 原.env数据库配置:
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3307 DB_DATABASE=laravel_essentials_app DB_USERNAME=sail DB_PASSWORD=password
- docker-compose.yml中MySQL服务:将容器3306端口映射到主机3307端口(本地运行MySQL Workbench占用默认端口)
解决方案:修改.env文件中的数据库配置,将DB_HOST改为mysql(对应Docker-compose中MySQL服务的服务名),DB_PORT改为容器内部的3306端口:
DB_CONNECTION=mysql DB_HOST=mysql DB_PORT=3306 DB_DATABASE=laravel_essentials_app DB_USERNAME=sail DB_PASSWORD=password
内容的提问来源于stack exchange,提问作者Christophoros Anthoulakis
相关产品推荐
相关产品推荐

