DockerでPHPエラー「php_network_getaddresses: getaddrinfo failed: Name or service not known」


DockerでPHPエラー「php_network_getaddresses: getaddrinfo failed: Name or service not known」

DockerでLAMP環境を構築し、Laravelをインストールしたところ、タイトルに書いてある「php_network_getaddresses: getaddrinfo failed: Name or service not known」というエラーが発生しました。どうやらDB接続でこけている様子。今回はこのエラーについて調査した結果をまとめます。

エラーの内容調査

エラー内容を読むと「getaddrinfo failed」ということで、アドレス情報取得時のエラーであることが分かります。
似たようなエラーに

  • php_network_getaddresses: getaddrinfo failed: nodename nor servname provided, or not known
  • php_network_getaddresses: getaddrinfo failed: No such host is known
  • php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution

などのエラーが存在していることもわかりました。
ホストの設定が間違っているとか名前解決に失敗していることが原因で発生するエラー達のようです。

.envの確認

今回のエラー「php_network_getaddresses: getaddrinfo failed: Name or service not known」は、
指定しているDBのホスト名の設定がおかしいのではと思い、Laravelの「.env」ファイルを確認してみることにしてみました。

DB_CONNECTION=mysql
DB_HOST=【ホスト名】
DB_PORT=3306
DB_DATABASE=test
DB_USERNAME=test
DB_PASSWORD=test

私は、上記の【ホスト名】のところに、MySQLコンテナに以下のようなコマンドでbashログインしたときに表示されるホスト名を指定していたのですが、
このホスト名(下記のXXXXXXXXXXXX部分)は、dockerのコンテナを作成するたびに変わるので、エラーが発生してしまっているようです。

$ docker exec -it docker_db_1 bash
root@XXXXXXXXXXXX:/#

docker-compose.ymlの確認

docker-compose.ymlを確認してみると、

~省略~
services:
  db:
    build: ./db
    volumes:
      - ./db/mysql_data:/var/lib/mysql
      - ./db/init:/docker-entrypoint-initdb.d
    environment:
~省略~

上記のようにMysqlは「db」をservice名に指定しているので、
.envのホスト名を合わせて「db」にしてみたところ、エラーが解消されました。

本エラーはDocker側の問題かLaravel側の問題かが分かりづらかったため、解決に時間がかかってしまいました。

  • このエントリーをはてなブックマークに追加

PAGE TOP