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

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

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

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Docker

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

Q&A

解決済

1回答

2646閲覧

laravel、dockerのDBエラーについて

I_d

総合スコア28

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Docker

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

0グッド

0クリップ

投稿2023/02/05 16:27

前提

laravel9、docker、Mysqlで環境構築を行い、DBの接続を確認するため
「php artisan migrate」を行ったところ、

「php_network_getaddresses: getaddrinfo for db failed: nodename nor servname provided, or not known」のエラーが出てしまいmigrateが出来ない状態です。

発生している問題・エラーメッセージ

Illuminate\Database\QueryException SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo for db failed: nodename nor servname provided, or not known (SQL: select * from information_schema.tables where table_schema = sample_db and table_name = migrations and table_type = 'BASE TABLE') at vendor/laravel/framework/src/Illuminate/Database/Connection.php:760 756▕ // If an exception occurs when attempting to run a query, we'll format the error 757▕ // message to include the bindings with SQL, which will make this exception a 758▕ // lot more helpful to the developer instead of just the database's errors. 759▕ catch (Exception $e) { ➜ 760▕ throw new QueryException( 761▕ $query, $this->prepareBindings($bindings), $e 762▕ ); 763▕ } 764▕ } +39 vendor frames 40 artisan:35 Illuminate\Foundation\Console\Kernel::handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))

該当のソースコード

.env (laravel内)

DB_CONNECTION=mysql # mysqlコンテナのサービス名(✖︎container_name) DB_HOST=db DB_PORT=3306 # ymlファイルのMYSQL_DATABASEと合わせる DB_DATABASE=sample_db DB_USERNAME=root DB_PASSWORD=root

docker-compose.yml

db: image: mysql:latest container_name: db environment: MYSQL_ROOT_PASSWORD: root # .envファイルの「DB_DATABASE」とMYSQL_DATABASEを合わせる MYSQL_DATABASE: sample_db TZ: "Asia/Tokyo" # 文字コード指定 command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci volumes: - ./docker/db/data:/var/lib/mysql - ./docker/db/my.cnf:/etc/mysql/conf.d/my.cnf - ./docker/db/sql:/docker-entrypoint-initdb.d ports: - "3306:3306"

試したこと

エラー修正のために

・envファイルのdbホスト名を「localhost」「127.0.0.1」「mysql」に変更。
・DNS サーバーが正常に動作しているか確認済
・ホスト名を IP アドレスに変更済

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

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

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

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

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

hoshi-takanori

2023/02/05 22:51

laravel はどこで動いてますか? ホストマシンで直接? または別の docker コンテナ? docker のコンテナはそれぞれ独立した IP アドレスを持ってるので…。
guest

回答1

0

ベストアンサー

初心者は余計なことせずLaravel公式のSailを使ったほうがいい。

「Dockerコンテナの外」でphp artisan migrateを実行しても「Dockerコンテナの中のDB」には接続できない。
「だったらDockerコンテナの中でphp artisan migrateを実行すればいい」と考えてdocker-compose exec app bashとかやりがちだけどこれが間違いの元。
「Dockerコンテナの中」で作業しようとしない。これを不便と思わないのは初心者の内だけ。
「いちいちコンテナの中で作業とか面倒すぎる」とすぐに理解できる。

Sailを使えば自然と「Dockerコンテナの外」だけで作業できる。

sail up -d sail artisan migrate sail art make:model Post -m

投稿2023/02/06 03:47

kawax

総合スコア10377

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

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

I_d

2023/02/07 12:47

sailを使用し、環境構築ができました! Dockerについてもう少し勉強してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.44%

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

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

質問する

関連した質問