SQLSTATE[HY000] [2002] 연결이 거부되었습니다 - docker-compose exec app php artisan migration

SQLSTATE[HY000] [2002] 연결이 거부되었습니다 - docker-compose exec app php artisan migration

Docker 컨테이너가 실행 중입니다.

CONTAINER ID        IMAGE                   COMMAND                  CREATED              STATUS                           PORTS                               NAMES
bf78987a0f5d        hakase-labs/laravel     "docker-php-entrypoi…"   56 minutes ago       Up 56 minutes                    9000/tcp                            app
d1fe2f9171bd        mysql:5.7               "docker-entrypoint.s…"   56 minutes ago       Up 56 minutes                    33060/tcp, 0.0.0.0:3312->3306/tcp   db
43f1025c1a59        nginx:alpine            "nginx -g 'daemon of…"   56 minutes ago       Restarting (1) 54 seconds ago                                        nginx

docker이것은 mysql, 및 가 포함된 Laravel 설치 입니다 nginx. Docker 컨테이너 내에서 마이그레이션을 실행하고 싶습니다.

docker-compose exec app php artisan migrate

내 데이터베이스 서비스는 매우 간단합니다 docker-compose.yml.

  #MySQL Service
  db:
   image: mysql:5.7
   container_name: db
   restart: unless-stopped
   tty: true
  ports:
   - "3312:3306"
  environment:
   MYSQL_DATABASE: laravel
   MYSQL_USER: laravel
   MYSQL_PASSWORD: password
   MYSQL_ROOT_PASSWORD: password
  volumes:
   - mysqldata:/var/lib/mysql/
  networks:
   - mynet

.env:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3312
DB_DATABASE=laravel
DB_USERNAME=laravel
DB_PASSWORD=password

내가 시도한 것;

DB_HOST=mysql

데이터베이스 포트 번호를 변경하십시오.

docker-compose exec app php artisan config:clear그리고docker-compose exec app php artisan cache:clear

컨테이너에 로그인 docker-compose exec app ash하고 거기에서 마이그레이션을 실행해 보십시오. 동일한 오류 메시지가 적용됩니다.

하지만 주사위는 없습니다. 컨테이너 artisan migrate내부에 무슨 문제가 있나요 docker?

편집: .env컨테이너 내부를 편집하고 있습니다.

 docker-compose exec app vim .env
APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:TWmjLcVOQFMIiKOKvtKQoFS/LMoH05ry/DF6148izL8=
APP_DEBUG=true
APP_URL=http://localhost

LOG_CHANNEL=stack

DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3307
DB_DATABASE=laravel
DB_USERNAME=laravel
DB_PASSWORD=password

따라서 내 로컬 복사본으로 전파됩니다.

DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3307
DB_DATABASE=laravel
DB_USERNAME=laravel
DB_PASSWORD=password

다시 실행해도 여전히 마이그레이션이 없습니다.

$ docker-compose exec app php artisan cache:clear
 Application cache cleared!
$ docker-compose exec app php artisan config:clear
 Configuration cache cleared!
$ docker-compose exec app php artisan migrate

Illuminate\Database\QueryException  : SQLSTATE[HY000] [2002] 
 Connection refused (SQL: select * 

답변1

이 튜토리얼을 따라하신 것 같습니다.dockerizing-laravel-with-nginx-mysql-and-docker-compose

DB_HOST에서 지정하는 서비스 이름이어야 docker-compose.yml하며 DB_PORT포트 매핑에서 지정하는 포트가 있어야 합니다.

.env파일을 편집할 때 :

DB_CONNECTION=mysql
DB_HOST=db          # <= service-name of db
DB_PORT=3306        # <= port-mapping from service: db
DB_DATABASE=laravel
DB_USERNAME=laravel
DB_PASSWORD=password

./artisan migrate데이터베이스에 연결하십시오.

답변2

이것은 나에게 효과적입니다. 재구축 컨테이너를 사용해야 할 수도 있다고 생각합니다 docker-compose up --build. 다른 사람들에게 유용할 수 있습니다.

DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306

관련 정보