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