[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を確認。

.env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=database
DB_USERNAME=hoge
DB_PASSWORD=hoge
docker-compose.yml
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内の

.env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=database
DB_USERNAME=hoge
DB_PASSWORD=hoge

.env
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=database
DB_USERNAME=hoge
DB_PASSWORD=hoge

に修正。

つながった

その他 参考記事