찾다

 >  Q&A  >  본문

Laravel Sail Docker MySQL 연결 문제

<p>Docker 컨테이너에 배포된 Laravel 애플리케이션을 통해 데이터베이스에 액세스하려고 하는데 다음 오류 메시지가 나타납니다. </p> <pre class="brush:php;toolbar:false;">SQLSTATE[HY000] [2002] 연결이 거부되었습니다. SELECT * FROM `게시물`</pre> <p>localhost/posts에서 액세스하려는 데이터베이스에 post라는 테이블이 있습니다.</p> <p>/posts의Blade模板如下:</p> <pre class="brush:php;toolbar:false;">@extends('app') @section('콘텐츠') <h1>게시물 색인 페이지</h1> @forelse($post를 $post로) <h2>{{ $post->제목 }}</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의 index函数如下:</p> <pre class="brush:php;toolbar:false;">공개 함수 인덱스() { $posts = 게시물::모두(); 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=참 APP_URL=http://localhost LOG_CHANNEL=스택 LOG_DEPRECATIONS_CHANNEL=널 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=널 REDIS_PORT=6379 MAIL_MAILER=smtp MAIL_HOST=메일호그 MAIL_PORT=1025 MAIL_USERNAME=null MAIL_PASSWORD=null MAIL_ENCRYPTION=널 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= 푸셔_포트=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 dockerfile: 도커파일 인수: WWW그룹: '${WWWGROUP}' 이미지: 항해-8.1/app extra_hosts: - '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-서버: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를 사용하고 있습니다.</p> <p>使用当前设置,我可以在wsl终端中无问题地运行php artisan migration.</p> <p>为了避免连接被拒绝错误, 我可以做什么来从localhost/posts访问posts?</p> <p><strong>解决方案</strong> 일반적인 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=항해 DB_PASSWORD=비밀번호</pre></p>
P粉949190972P粉949190972485일 전588

모든 응답(1)나는 대답할 것이다

  • P粉547420474

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

    .env 파일에서 DB_HOST 값을 mysql

    로 설정하세요.

    회신하다
    0
  • 취소회신하다