[Docker] laravelからmysql接続時にエラー 「php_network_getaddresses: getaddrinfo failed: Name or service not known」
DockerでLAMP環境を構築し、Laravelからmysqlに接続(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 = database and table_name = migrations and table_type = 'BASE TABLE')
エラー内容を見たところ、mysqlに接続しているホスト名が違うらしいので、laravelの.envファイルとdocker-composer.ymlを確認。
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=database
DB_USERNAME=hoge
DB_PASSWORD=hoge
version: '3'
services:
db:
image: mysql:5.7
container_name: db-host
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: database
MYSQL_USER: hoge
MYSQL_PASSWORD: hoge
別の方法でmysqlに接続
ホスト名は間違ってなさそうだと思い、データベースマネージャ(TablePlus)を使い接続を確認。
Ver: Mysql 5.x
Host: 127.0.0.1
Port: 3306
User: hoge
password: hoge
Database: database
TablePlusではつながりました。
もしや問題はDocker特有の何か、、??
DockerのDBコンテナ関連について調べた
こちらの記事によるとコンテナ内からのコンテナに接続する際はホスト名がIPでは無理らしく、service名で接続だそう
Laravel内の
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=database
DB_USERNAME=hoge
DB_PASSWORD=hoge
を
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=database
DB_USERNAME=hoge
DB_PASSWORD=hoge
に修正。
つながった
その他 参考記事
Author And Source
この問題について([Docker] laravelからmysql接続時にエラー 「php_network_getaddresses: getaddrinfo failed: Name or service not known」), 我々は、より多くの情報をここで見つけました https://qiita.com/uta3chame/items/47b393e5887530573118著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .