2017-10-15 3 views
0

Laradockをmysql dbで正しく動作させる方法を理解できません。Laradockがmysqlで動作しない

私は

docker-compose up -d nginx mysql 

を使用してコンテナをスピンアップ、すべてをlaradockドキュメントを踏襲し、インストールしたPHP側が動作しているようです、私は、このような

project 
    +laradock-spa 

のように複数のプロジェクト・バージョンのレイアウトを持って、私は得ることができますlaravelようこそページアップ、DBを接続することは私の問題を引き起こしている。

まず、どこでphp artisan migrateのようなphp artisanコマンドを実行する必要がありますか?プロジェクトフォルダ内のマシンから、またはドッカーコンテナ内から実行する必要がありますか?

プロジェクトフォルダから実行すると、動作し、mysqlコンテナに入り、migrationuserなどの初期dbテーブルを参照できます。

しかし、私はポストマン内で動作するようにDBへの最初のPOSTを得ることができない - 私は、だから私は多分私がワークスペース・コンテナ内からmigrateコマンドを実行していることになってると思ったので、私のエラーSQLSTATE[HY000] [2002] No such file or directory (SQL: insert into users (...

を取得ここからはphp artisan migrateコマンドのエラー[Illuminate\Database\QueryException] SQLSTATE[HY000] [2002] No such file or directory (SQL: select * from information_schem a.tables where table_schema = spa and table_name = migrations)

私が言ったように、私は正常にmysqlコンテナに入り、rootパスワードを使用してDBにログインし、最初の移行を実行した後、そこのテーブル。

docker psはすべての容器を示します。

誰かがどのように動作するのか、これをトラブルシューティングする方法を説明できますか?私はどのコマンドを実行するべきか、そしてコンテナが互いにどのように話し合うべきかはわかりません。しかし、基本的に、私はどのようにmysqlデータベースをlaravelプロジェクトで動作させることができますか?

Btw、私はローカルのMySQLもPC上で実行している、多分それはいくつかの競合/混乱を引き起こしている?

私はこれをWin10で実行しています。

+0

それは.envはこれが機能するためには、 'DB_HOST = mysql'を必要と判明しました。まだ混乱していますが、他の誰かを助ける場合に備えてここに残しておきます – yoyoma

答えて

2

Laradockを使用している場合、1つの共有ネットワーク内の別々のサーバー/コンピュータであるかのように考える必要があります。下の図の各四角形は、独自のIPアドレス、独自のLinuxシステムなどを持つ1つのサーバを表しています。したがって、別のコンテナからMySQLに接続するには、そのIPアドレスまたはホスト名を知る必要があります。

幸いなことに、Laradockはこれを緩和するために少しだけマジックを提供しています。あなたの設定には、代わりにmysqlというホスト名を使うことができます。 redisを有効にするには、docker-compose upで再起動を行い、laravel configにredisというホスト名を指定するだけです。

トラブルシューティングについては、​​が何が起こっているかを確認する最善の方法です。残りの部分はマルチコンテナの概念を理解したものです。

docker-compose.ymlにコンテナポートを公開せずにホストPCからコンテナに接続できないように注意してください。コンテナIPはホストが仮想ネットワークに属しているため表示されず、コンピュータが接続されている実際のIPでは表示されません。デフォルトのポートはすでにdocker-compose.ymlに公開されているので、ip 127.0.0.1とport 3306でDBにアクセスできます。ポート80でnginxと同様にアクセスすることができます。

希望、これは今、もう少し明確である:)

enter image description here