検索

ホームページ  >  に質問  >  本文

Laravel Sail Docker MySQL 接続の問題

<p>Docker コンテナにデプロイされた Laravel アプリケーションを通じてデータベースにアクセスしようとしていますが、次のエラー メッセージが表示されます。 </p> <pre class="brush:php;toolbar:false;">SQLSTATE[HY000] [2002] 接続が拒否されました SELECT * FROM `posts`</pre> <p>localhost/posts からアクセスしようとしているデータベースには、posts というテーブルがあります。</p> <p>/posts のブレード型板は以下の通り:</p> <pre class="brush:php;toolbar:false;">@extends('app') @section('コンテンツ') <h1>投稿インデックスページ</h1> @forelse ($posts として $post) <h2>{{ $post->title }}</h2> @空の <h2>投稿はありません!</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 のインデックス関数の数は次のとおりです:</p> <pre class="brush:php;toolbar:false;">パブリック関数 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=ローカル APP_KEY=base64:1HEk/HaN8IL/wV8q4DCzpvmM/cYRDvGAIe 0DxS9ggo= APP_DEBUG=true APP_URL=http://localhost LOG_CHANNEL=スタック LOG_DEPRECATIONS_CHANNEL=null LOG_LEVEL=デバッグ DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3307 DB_DATABASE=laravel_essentials_app DB_USERNAME=帆 DB_PASSWORD=パスワード BROADCAST_DRIVER=ログ CACHE_DRIVER=ファイル FILESYSTEM_DISK=ローカル QUEUE_CONNECTION=同期 SESSION_DRIVER=ファイル SESSION_LIFETIME=120 MEMCACHED_HOST=memcached REDIS_HOST=レディス REDIS_PASSWORD=null REDIS_PORT=6379 MAIL_MAILER=smtp MAIL_HOST=メールホッグ 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_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;"># 詳細については: https://laravel.com/docs/sail バージョン: '3' サービス: laravel.test: 建てる: コンテキスト: ./vendor/laravel/sail/runtimes/8.1 ドッカーファイル:ドッカーファイル 引数: WWWGROUP: '${WWWGROUP}' 画像: セイル-8.1/アプリ 追加ホスト: - 'host.docker.internal:ホストゲートウェイ' ポート: - '${APP_PORT:-80}:80' - '${VITE_PORT:-5173}:${VITE_PORT:-5173}' 環境: WWWユーザー: '${WWWUSER}' LARAVEL_SAIL: 1 XDEBUG_MODE: '${SAIL_XDEBUG_MODE:-off}' XDEBUG_CONFIG: '${SAIL_XDEBUG_CONFIG:-client_host=host.docker.internal}' ボリューム: - '.:/var/www/html' ネットワーク: - 帆 依存: -mysql - レディス mysql: 画像: 'mysql/mysql-server:8.0' ポート: - '${FORWARD_DB_PORT:-3307}:3306' 環境: 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 ボリューム: - 「sail-mysql:/var/lib/mysql」 - './vendor/laravel/sail/database/mysql/create-testing-database.sh:/docker-entrypoint-initdb.d/10-create-testing-database.sh' ネットワーク: - 帆 健康診断: テスト: ["CMD"、"mysqladmin"、"ping"、"-p${DB_PASSWORD}"] 再試行: 3 タイムアウト: 5秒 レディス: 画像: 'redis:alpine' ポート: - '${FORWARD_REDIS_PORT:-6379}:6379' ボリューム: - 'sail-redis:/data' ネットワーク: - 帆 健康診断: テスト: ["CMD"、"redis-cli"、"ping"] 再試行: 3 タイムアウト: 5秒 ネットワーク: 帆: ドライバー:ブリッジ ボリューム: セイル-mysql: ドライバー: ローカル セイルレディス: ドライバー: ローカル</pre> <p>私たちのオペレーティング システムは Windows 11 で、上では MySQL Workbench を実行しています。これは、3306 ポートではなく 3307 ポートを公開するためです。</p> <p> 現在の設定を使用すると、wsl 端末で PHP 職人移行を問題なく実行できます。 <p>拒否による接続を回避するために、localhost/posts から posts にアクセスしてもよいでしょうか?</p> <p><strong>解決策</strong> この問題は、.env 内の DB_HOST を mysql に変更し、同時に DB_PORT を 3306 に変更することで解決します。 <p>終了後の.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=帆 DB_PASSWORD=パスワード</pre></p>
P粉949190972P粉949190972485日前585

全員に返信(1)返信します

  • P粉547420474

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

    .env ファイルで DB_HOST の値を mysql

    に設定します。

    返事
    0
  • キャンセル返事