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

関連情報