Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

LaradockのMySQLに接続できなくてはまった話

More than 1 year has passed since last update.

概要

LaradockでLaravelの環境を作ったがMySQLに接続できなくてだいぶはまったので対処法をまとめた。

初期設定

まずは公式ドキュメントを参考に。
Getting Started

プロジェクトディレクトリで下記コマンドを叩く。

$ git clone https://github.com/laradock/laradock.git
$ cd laradock
$ cp env-example .env
$ docker-compose up -d nginx mysql phpmyadmin redis workspace 

laradock/.envを修正

laradock/.env
# Laravelプロジェクトパスに変更
APP_CODE_PATH_HOST=../myapp/

# 下記を追加
DB_HOST=mysql
REDIS_HOST=redis
QUEUE_HOST=beanstalkd

port変更

Apacheとバッティングしそうなのでportを変更した。

laradock/.env
NGINX_HOST_HTTP_PORT=8888

Laravelインストール

コンテナに入る。

$ docker-compose exec workspace bash

入ったらLaravelをインストールする。

root@e8802b8f256b:/var/www# composer create-project laravel/laravel myapp

インストールが完了したらlocalhost:8888にアクセスするとLaravelの画面が表示される。

DB接続

php artisan migrate

[PDOException]
SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client

[ErrorException]
PDO::__construct(): The server requested authentication method unknown to the client [caching_sha2_password]

エラーが返ってきて死ぬほどはまった。

MySQL 8.0から仕様が変わったとのこと。
MySQL 8.0.4におけるデフォルト認証形式の変更
【Docker】MySQL8.0系を使う時に発生する問題について

8.0である必要がなかったので、5.7にして再ビルドした。

やったこと

イメージ、データ削除

$ docker rmi laradock_mysql
$ docker rm volume laradock_mysql
$ rm -rf ~/.lardock/data/mysql

バージョンを5.7に変更

laradock/.env
MYSQL_VERSION=5.7

再ビルド

$ docker-compose build --no-cache mysql

MySQLバージョン確認

$ docker-compose exec mysql bash
root@8a9792617ae7:/# mysql --version
mysql  Ver 14.14 Distrib 5.7.24, for Linux (x86_64) using  EditLine wrapper

MySQLにログイン

$ docker-compose exec mysql bash
root@8a9792617ae7:/# mysql -udefault -psecret
mysql> 

php artisan migrateが実行できるか確認

$ docker exec -it laradock_workspace_1 /bin/bash
root@09a020d7430e:/var/www# php artisan migrate
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated:  2014_10_12_000000_create_users_table
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated:  2014_10_12_100000_create_password_resets_table

これ見て解決した。
SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client #1392

これ以外にやったこと

myapp/.envlaradock/.envに合わせるよう修正

laradock/.env
MYSQL_VERSION=5.7
MYSQL_DATABASE=default
MYSQL_USER=default
MYSQL_PASSWORD=secret
MYSQL_PORT=3306
MYSQL_ROOT_PASSWORD=root
MYSQL_ENTRYPOINT_INITDB=./mysql/docker-entrypoint-initdb.d
myapp/.env
DB_CONNECTION=mysql
DB_HOST=mysqlあるいは192.168.0.1
DB_PORT=3306
DB_DATABASE=default
DB_USERNAME=default
DB_PASSWORD=secret

Request::ip()で出てきたIPに合わせるといける。

@php
echo Request::ip()."<br>";
$remote_addr = $_SERVER['REMOTE_ADDR']."<br>";
$server_addr = $_SERVER['SERVER_ADDR']."<br>";
echo $remote_addr;
echo $server_addr;
@endphp

[php] Laravel 5.1でクライアントのIPアドレスを取得する方法は?

dnrsm
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away