質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

5回答

3273閲覧

dockerでmysqlに接続出来ない

xin

総合スコア17

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

1グッド

1クリップ

投稿2018/04/17 17:04

編集2018/04/26 15:59

いつもお世話になっております。
dockerでlaravel開発環境を作る練習をしているのですが、エラーが出てしまいググっても解決策を見つけられず、質問させて頂きます。
以下のqiita記事の通りに進めました。

https://qiita.com/RyosukeKamei/items/085b40e4e869e77b0756

開発環境:
mac os High Sierra 10.13.4
docker for mac
nginx + mysql +laravel

記事最後の

docker-compose exec workspace php artisan migrate

の手前まではうまくいったのですが、上記のコマンドを打つと

Illuminate\Database\QueryException : SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known (SQL: select * from information_schema.tables where table_schema = default and table_name = migrations) at /var/www/vendor/laravel/framework/src/Illuminate/Database/Connection.php:664 660| // If an exception occurs when attempting to run a query, we'll format the error 661| // message to include the bindings with SQL, which will make this exception a 662| // lot more helpful to the developer instead of just the database's errors. 663| catch (Exception $e) { > 664| throw new QueryException( 665| $query, $this->prepareBindings($bindings), $e 666| ); 667| } 668| Exception trace: 1 PDOException::("PDO::__construct(): php_network_getaddresses: getaddrinfo failed: Name or service not known") /var/www/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:68 2 PDO::__construct("mysql:host=mysql;port=3306;dbname=default", "default", "secret", []) /var/www/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:68 Please use the argument -v to see more details.

とエラーが出てしまいました。
どなたかアドバイス頂けると有難いです。

<補足>
具体的なコマンドとエラー

laradockをダウンロード

mkdir my-laravel cd my-laravel/ git init git clone https://github.com/Laradock/laradock.git my-laradock cd my-laradock/ cp env-example .env vi .env

./mylaradock/.envを編集

### Paths ################################################# # Point to the path of your applications code on your host APP_CODE_PATH_HOST=../src/ //ここを編集 # Point to where the `APP_CODE_PATH_HOST` should be in the container. You may add flags to the path `:cached`, `:delegated`. When using Docker Sync add `:nocopy` APP_CODE_PATH_CONTAINER=/var/www:cached # Choose storage path on your machine. For all storage systems DATA_PATH_HOST=~/.laradock/data ### Drivers ################################################ : 省略 : : ### MYSQL ################################################# MYSQL_VERSION=8.0 //ここを編集 MYSQL_DATABASE=dev_db //ここを編集 MYSQL_USER=dev_user //ここを編集 MYSQL_PASSWORD=password //ここを編集 MYSQL_PORT=3306 MYSQL_ROOT_PASSWORD=root MYSQL_ENTRYPOINT_INITDB=./mysql/docker-entrypoint-initdb.d ### REDIS #################################################
docker-compose up -d nginx mysql docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ac4e31328b53 mylaradock_nginx "nginx" 4 minutes ago Up 5 minutes 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp mylaradock_nginx_1 1159ae63b755 mylaradock_php-fpm "docker-php-entrypoi…" 4 minutes ago Up 5 minutes 9000/tcp mylaradock_php-fpm_1 c2c27660a2d7 mylaradock_mysql "docker-entrypoint.s…" 4 minutes ago Up 5 minutes 0.0.0.0:3306->3306/tcp mylaradock_mysql_1

この時点でnginxの404ページが表示されました

workspaceがなかったので個別に起動

docker-compose up -d workspace docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 00072367f1c6 mylaradock_workspace "/sbin/my_init" 14 minutes ago Up 15 minutes 0.0.0.0:2222->22/tcp mylaradock_workspace_1 ac4e31328b53 mylaradock_nginx "nginx" 25 minutes ago Up 25 minutes 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp mylaradock_nginx_1 1159ae63b755 mylaradock_php-fpm "docker-php-entrypoi…" 25 minutes ago Up 25 minutes 9000/tcp mylaradock_php-fpm_1 c2c27660a2d7 myaradock_mysql "docker-entrypoint.s…" 25 minutes ago Up 25 minutes 0.0.0.0:3306->3306/tcp mylaradock_mysql_1

Laravelプロジェクトを作成

docker-compose exec workspace composer create-project --prefer-dist laravel/laravel ./ cd ./src vi .env

laravelのウェルカム画面が表示されました

MySQLの設定を反映
./src/.envを編集

DB_CONNECTION=mysql DB_HOST=mysql //ここを編集 DB_PORT=3306 DB_DATABASE=dev_db //ここを編集 DB_USERNAME=dev_user //ここを編集 DB_PASSWORD=password //ここを編集

./src/config/database.phpを編集

'mysql' => [ 'driver' => 'mysql', 'host' => env('DB_HOST', 'mysql'), //ここを編集 'port' => env('DB_PORT', '3306'), 'database' => env('DB_DATABASE', 'dev_db'), //ここを編集 'username' => env('DB_USERNAME', 'dev_user'), //ここを編集 'password' => env('DB_PASSWORD', 'password'), //ここを編集 'unix_socket' => env('DB_SOCKET', ''), 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', 'strict' => true, 'engine' => null, ],

ここで

docker-compose exec workspace php artisan migrate

を実行すると冒頭のエラーが出ました。


------------ 4/26追記 ----------------------------------------------------

maverixzさんにアドバイス頂いた通り、mysqlバージョン8.0で作り直してみました。

前提としてdocker system pruneを実行、全てのコンテナを消してネットワークを初期化しました。
imageはpruneでは消えなかったので念のため全て消去しました。
laradockの.envの設定でmysqlデータがホストのルートに永続化されていたため、このフォルダも消去しました。↓

# Choose storage path on your machine. For all storage systems DATA_PATH_HOST=~/.laradock/data

1)laradock/.envを編集

### MYSQL ################################################# MYSQL_VERSION=8.0 //defaultから8.0に変更

2)docker-compose up -d nginx mysqlを実行
3)mysqlコンテナが一度はdoneになるがdocker psしても立ち上がっていない
4)以下がmysqlコンテナのlogです

018-04-26T13:18:04.820630700Z ERROR: mysqld failed while attempting to check config command was: "mysqld --verbose --help" 2018-04-26T13:18:04.820716500Z 2018-04-26T13:18:04.811937Z 0 [Warning] [MY-011070] [Server] 'Disabling symbolic links using --skip-symbolic-links (or equivalent) is the default. Consider not using this option as it' is deprecated and will be removed in a future release. 2018-04-26T13:18:04.812012Z 0 [ERROR] [MY-011071] [Server] /usr/sbin/mysqld: Error while setting value 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' to 'sql_mode' 2018-04-26T13:18:04.813618Z 0 [ERROR] [MY-010119] [Server] Aborting

4)再度docker環境を初期化、今度はlaradock/.envを以下のように編集

### MYSQL ################################################# MYSQL_VERSION=5.7.21 //defaultから5.7.21に変更

5)その後は同じ手順で実行するとmysqlコンテナはUPの状態になりました。

6)今回投稿した内容の通りにphp artisan migrateまで進み、無事マイグレーションできました。

mysqlのバージョンを8.0に変更した理由は、誰かとプロジェクトを共有する際にバージョンが変わるのを避けたかったので、数字で指定したかった
公式

Change the (MySQL) Version#

By default MySQL 8.0 is running.


再度maverixzさんのアドバイス通り、MYSQL_VERSION 8.0.3でトライ
→マイグレーションまで無事完了
----結論----

2018/4/26時点で
MYSQL_VERSION 8.0.3までは正常に動くが、8.0.4では動かない(8.0でプルすると8.0.4になるので同様)

細かい原因糾明まで助けてくださったmaverixzさんをベストアンサーにさせていただきました。

xenbeat👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

xenbeat

2018/04/17 22:08

念のためcomposeとlaravelの.envファイルの内容、docker psコマンドの結果を追記ください。
DaichiYasuda

2018/04/18 02:00

docker-compose.ymlファイルを見せてください
xin

2018/04/18 03:07 編集

すみません、、docker-compose.ymlの中身が多すぎて文字数を超えてしまいました、、 ここはデフォルトのままで編集していないです。 https://github.com/laradock/laradockは参考サイトの記載のある.envは修正しました。 具体的な作業やdocker psコマンドの結果も追記させて頂きました。 dockerが初めてで的を得ていないかもしれませんが、、わかりにくい箇所ありましたらご指摘ください。
xenbeat

2018/04/18 03:16

「//ここを編集」の部分は編集後ですか編集前ですか?
guest

回答5

0

ベストアンサー

追記いただいた内容が正だとすると以下でイケるかと思います。

  1. envを修正
MYSQL_VERSION=8.0 ↓ MYSQL_VERSION=latest または MYSQL_VERSION=8.0.3
  1. ビルド
docker-compose build --no-cache mysql

投稿2018/04/18 03:51

xenbeat

総合スコア4258

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

xin

2018/04/23 11:21

お返事が遅くなってしまってすみません、、 mysqlのバージョンを変更してビルドすると、mysqlのコンテナが一瞬立ち上がって起動できなくなり、、 一度コンテナとimageを全て決して、~/.laradockに永続化されていたdbデータも全部消して作り直すとマイグレーションできました、、 原因分からず申し訳ありません、ご協力有難うございました。
xenbeat

2018/04/24 08:54

なんかモヤッとしますねー。。。 今後のために、MYSQL_VERSIONを最終的に何にしたかだけ教えていただけますか?
xin

2018/04/24 11:46

全て消したあとに最初から5.7.21でmysqlバージョンを指定し、docker-compose upして進んで行くと今度はmigrationまで問題なく進めました、、
xenbeat

2018/04/26 15:26 編集

> 全て消したあとに最初から5.7.21でmysqlバージョンを指定 ということは、接続情報はそのままで MYSQL_VERSIONを「8.0」から「5.7.21」に修正されたということですね。 個人的には、8.0.4でのdefault authenticationの変更(https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-4.html)によるものかと思っているのですが、Lulucomさんが回答された接続情報のキャッシュが悪さをした可能性もあります。 この状態ですと誰も参考にならないQAとなってしまいますので、もしお時間がありましたら、Teratailや他の人のためにも、MYSQL_VERSIONだけ「8.0」となった同環境(最初の状態)を再構築いただいて、結果を共有いただけますと幸いです。
xin

2018/04/26 14:27

また遅くなってしまってすみません、、 一旦環境を全て消して、アドバイス頂いた通りMYSQL_VERSIONを8.0で作り直してみるとmysqlコンテナがUPの状態にならず、もう一度5.7.1でやり直すとマイグレーションまで進めました。 docker pruneしてimageも全て消したので、キャッシュではなくmysqlバージョンという事でしょうか、、
xenbeat

2018/04/26 14:59 編集

確認ありがとうございます! 可能性は高くなってきましたね。 現在「MYSQL_VERSION=8.0」を指定するとV8.0.4以降がプルされます。 私の回答した「MYSQL_VERSION=8.0.3」も試してみていただけると結論は出そうです。 お手数ですがお手すきの際に試していただけますと幸いです。
xin

2018/04/26 15:17

「MYSQL_VERSION=8.0.3」で試してみました! マイグレーションまで無事完了しました! 公式を読むと、(英語なので勘違いしているかもしれないのですが、) > Change the (MySQL) Version# By default MySQL 8.0 is running. MySQL 8.0 is a development release. You may prefer to use the latest stable version, or an even older release. If you wish, you can change the MySQL image that is used. Open up your .env file and set the MYSQL_VERSION variable to the version you would like to install. MYSQL_VERSION=5.7 Available versions are: 5.5, 5.6, 5.7, 8.0, or latest. See https://store.docker.com/images/mysql for more information. とあり、8.0でも良いのかなと思ったのですが、8.0や8.0.4では設定できないという事でしょうか、、
xenbeat

2018/04/26 15:48 編集

>「MYSQL_VERSION=8.0.3」で試してみました! >マイグレーションまで無事完了しました! なるほど、V8.0.4以降のMySQLが悪さをした可能性が高いですね。 てか、ものすごくタイムリーにISSUEが上がってますね。 https://github.com/laradock/laradock/issues/1492 > 8.0でも良いのかなと思ったのですが、8.0や8.0.4では設定できないという事でしょうか この世界、必ずしもドキュメントが正とは限らないので、 ソースコード(今回はlaradoc)をベースに、それが依存しているプロダクト(今回はMySQL)に何か起こってないかというのを総合的に判断しないといけない場合が多々あります。 前回QAのオライリー本の誤植もそうですが、あくまでも今手元で動いているソースコードやプログラムが正なのです。
xin

2018/04/26 16:03

なるほど、、 >前回QAのオライリー本の誤植もそうですが、あくまでも今手元で動いているソースコードやプログラムが正なのです。 プログラミングを始めたばかりですが、その点が難しいなあと思う気持ちと面白いなあという気持ちで半々です、、 総合的に判断出来るよう勉強していきます! 遅くまで有難うございました!
xenbeat

2018/04/26 16:15

調査にご協力いただきありがとうございました! お疲れさまでした!
guest

0

他の回答者様が指摘されているようにおそらくDB接続設定の問題かと思います。
どうしても解決しないようであれば一度公式ドキュメントの手順で組み直されてみると上手くいくかもしれません。

http://laradock.io/getting-started/

ご質問の回答からはズレますが、LaravelをDockerで組む練習ということでしたらDockerfileとDockerComposeをシンプルに自作するとコントロールしやすいかと思います。
初めてLaradockを見てみましたが初心者の手元の開発環境としてはオーバーエンジニアリングな気がします・・・

私もLaravel on Docker開発環境を自作しています。

https://github.com/dyoshikawa/laravel-devkit

今後、自作検討される機会があるようでしたらご参考になればと思います。

投稿2018/04/22 04:13

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

xin

2018/04/23 11:29

お返事が遅くなってしまってすみません、、 一度コンテナもimageも永続化データも全て消して、やり直すとできました、、 何が原因だったのかは分からず、、 ご回答の通り、laradockは高機能ですが初心者が少しカスタマイズしようとすると大変なようですね。 ご提示頂いた開発環境で勉強してみようと思います! 有難うございました。
guest

0

2 PDO::__construct("mysql:host=mysql;port=3306;dbname=default", "default", "secret", [])

エラーメッセージの上の部分からは、以下に接続しようとしているように見えます。

 データベース: default
ユーザー: default
パスワード: secret

掲載された .envconfig/database.php の内容と異なりますので、再度、それらのファイルを確認してみてください。
あと、設定変更後は php artisan config:clear で設定キャッシュのクリアもしてみてください。

投稿2018/04/22 05:42

Lulucom

総合スコア1899

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

xin

2018/04/23 11:24

お返事が遅くなってしまってすみません、、 mysqlのバージョンを変更してみる、という方法を先にやってみたのですが、mysqlのコンテナが一瞬立ち上がって起動できなくなり、今度はそこから進めなくなってしまいました、、 最終的に一度コンテナとimageを全て決して、~/.laradockに永続化されていたdbデータも全部消して作り直すとマイグレーションできました、、 原因分からず申し訳ありません、ご協力有難うございました。
Lulucom

2018/04/23 11:40

承知しました。 おそらく、mysqlコンテナの再ビルドを行なっていなかったか、Laravelの設定キャッシュが悪さをしていたか、のどちらかではないかと思いました。 ご報告のコメントありがとうございました。
guest

0

DB_HOSTにmysqlのコンテナのNAME(mylaradock_mysql_1)を指定してみてもだめでしょうか?

投稿2018/04/18 04:49

tashua314

総合スコア145

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

構成が分かりませんが、、、

php

1PDO::__construct("mysql:host=mysql;port=3306;dbname=default", "default", "secret", [])

host=mysqlに接続できてないのではないでしょうか。
DB_HOST=mysqlはコンテナ名を記述しなければならないですが、コンテナ名はmysqlですか?

投稿2018/04/18 02:05

DaichiYasuda

総合スコア173

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

xin

2018/04/18 03:11 編集

ご回答有難うございます。 ./src/.envと./src/config/database.phpを編集してHOSTをmysqlにしたのですが、他に設定しなければならない箇所があるのでしょうか、、? docker psしてみると、 mylaradock_mysql_1 という名前になっています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問