suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Laravel Sail Docker MySQL-Verbindungsproblem

<p>Ich versuche, über eine Laravel-Anwendung, die in einem Docker-Container bereitgestellt wird, auf eine Datenbank zuzugreifen, erhalte jedoch die folgende Fehlermeldung: </p> <pre class="brush:php;toolbar:false;">SQLSTATE[HY000] [2002] Verbindung abgelehnt SELECT * FROM `posts`</pre> <p>Es gibt eine Tabelle namens posts in der Datenbank, auf die ich über localhost/posts zugreifen möchte.</p> <p>/posts的Blade模板如下:</p> <pre class="brush:php;toolbar:false;">@extends('app') @section('content') <h1>Beitragsindexseite</h1> @forelse ($posts als $post) <h2>{{ $post->title }}</h2> @leer <h2>Keine Beiträge!</h2> @endforelse @endsection</pre> <p>负责/posts的web.php中的路由如下:</p> <pre class="brush:php;toolbar:false;">Route::resource('/posts', PostController::class)->only(['index', 'store']);< /pre> <p>PostController的index函数如下:</p> <pre class="brush:php;toolbar:false;">public function index() { $posts = Post::all(); return view('posts.index', compact('posts')); }</pre> <p>我的.env文件如下:</p> <pre class="brush:php;toolbar:false;">APP_NAME=Laravel APP_ENV=lokal APP_KEY=base64:1HEk/HaN8IL/wV8q4DCzpvmM/cYRDvGAIe+0DxS9ggo= APP_DEBUG=true APP_URL=http://localhost LOG_CHANNEL=Stack LOG_DEPRECATIONS_CHANNEL=null LOG_LEVEL=debug DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3307 DB_DATABASE=laravel_essentials_app DB_USERNAME=Segel DB_PASSWORD=Passwort BROADCAST_DRIVER=log CACHE_DRIVER=Datei FILESYSTEM_DISK=lokal QUEUE_CONNECTION=sync SESSION_DRIVER=Datei SESSION_LIFETIME=120 MEMCACHED_HOST=memcached REDIS_HOST=redis REDIS_PASSWORD=null REDIS_PORT=6379 MAIL_MAILER=smtp MAIL_HOST=mailhog MAIL_PORT=1025 MAIL_USERNAME=null MAIL_PASSWORD=null MAIL_ENCRYPTION=null MAIL_FROM_ADDRESS="hello@example.com" MAIL_FROM_NAME="${APP_NAME}" AWS_ACCESS_KEY_ID= AWS_SECRET_ACCESS_KEY= AWS_DEFAULT_REGION=us-east-1 AWS_BUCKET= AWS_USE_PATH_STYLE_ENDPOINT=false PUSHER_APP_ID= PUSHER_APP_KEY= PUSHER_APP_SECRET= PUSHER_HOST= PUSHER_PORT=443 PUSHER_SCHEME=https PUSHER_APP_CLUSTER=mt1 VITE_PUSHER_APP_KEY="${PUSHER_APP_KEY}" VITE_PUSHER_HOST="${PUSHER_HOST}" VITE_PUSHER_PORT="${PUSHER_PORT}" VITE_PUSHER_SCHEME="${PUSHER_SCHEME}" VITE_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"</pre> <p>我的docker-compose.yml文件如下:</p> <pre class="brush:php;toolbar:false;"># Weitere Informationen: https://laravel.com/docs/sail Version: '3' Dienstleistungen: laravel.test: bauen: Kontext: ./vendor/laravel/sail/runtimes/8.1 Dockerdatei: Dockerdatei Argumente: WWWGROUP: '${WWWGROUP}' Bild: Sail-8.1/App extra_hosts: - 'host.docker.internal:host-gateway' Häfen: - '${APP_PORT:-80}:80' - '${VITE_PORT:-5173}:${VITE_PORT:-5173}' Umfeld: WWWUSER: '${WWWUSER}' LARAVEL_SAIL: 1 XDEBUG_MODE: '${SAIL_XDEBUG_MODE:-off}' XDEBUG_CONFIG: '${SAIL_XDEBUG_CONFIG:-client_host=host.docker.internal}' Bände: - '.:/var/www/html' Netzwerke: - Segeln kommt drauf an: - MySQL - Redis MySQL: Bild: 'mysql/mysql-server:8.0' Häfen: - '${FORWARD_DB_PORT:-3307}:3306' Umfeld: MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}' MYSQL_ROOT_HOST: "${DB_HOST}" MYSQL_DATABASE: '${DB_DATABASE}' MYSQL_USER: '${DB_USERNAME}' MYSQL_PASSWORD: '${DB_PASSWORD}' MYSQL_ALLOW_EMPTY_PASSWORD: 1 Bände: - 'sail-mysql:/var/lib/mysql' - './vendor/laravel/sail/database/mysql/create-testing-database.sh:/docker-entrypoint-initdb.d/10-create-testing-database.sh' Netzwerke: - Segeln Gesundheitskontrolle: test: ["CMD", "mysqladmin", "ping", "-p${DB_PASSWORD}"] Wiederholungen: 3 Zeitüberschreitung: 5s redis: Bild: 'redis:alpine' Häfen: - '${FORWARD_REDIS_PORT:-6379}:6379' Bände: - 'sail-redis:/data' Netzwerke: - Segeln Gesundheitskontrolle: test: ["CMD", "redis-cli", "ping"] Wiederholungen: 3 Zeitüberschreitung: 5s Netzwerke: Segel: Fahrer: Brücke Bände: Segel-MySQL: Treiber: lokal Segel-Redis: Treiber: lokal</pre> <p>我的操作系统是Windows 11, 我在上面运行MySQL 。</p> <p>使用当前设置,我可以在wsl终端中无问题地运行php artisan migrate。</p> <p>为了避免连接被拒绝错误,我可以做什么来从localhost/posts访问posts?</p> <p><strong>解决方案</strong> 通过将.env中的DB_HOST更改为mysql, 同时将DB_PORT更改为3306来解决问题.</p> <p><strong>编辑后的.env文件</strong></p> <pre class="brush:php;toolbar:false;">DB_CONNECTION=mysql DB_HOST=mysql DB_PORT=3306 DB_DATABASE=laravel_essentials_app DB_USERNAME=Segel DB_PASSWORD=Passwort</pre></p>
P粉949190972P粉949190972485 Tage vor586

Antworte allen(1)Ich werde antworten

  • P粉547420474

    P粉5474204742023-08-27 13:22:50

    在您的.env文件中将DB_HOST的值设置为mysql

    Antwort
    0
  • StornierenAntwort