Laravel→DockerのDB接続時に SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo for mysql failed:  が出てしまう。

envファイルにDBの接続情報を記載し、コマンドで「php artisan migrate」を実行した所、タイトルのエラーが表示されました。
初歩的なミスが原因でしたが、同じように困っている方がいるかもしれませんので原因と解決方法を書きます。

環境について

Dockerのcompose.yamlは下記になります。
webディレクトリをローカルのLaravelディレクトリにしており「php artisan migrate」はローカルで実行しております。

services:
  web:
    container_name: web
    build:
        dockerfile: Dockerfile
    volumes:
      - 【Laravelのパス名】:/var/www/html
    depends_on:
      - mysql  
mysql:
    container_name: mysql
    ports:
      - "【ポート番号】:【ポート番号】"
    environment:
      MYSQL_ROOT_PASSWORD: 【パスワード】

原因

pdo_mysqlがdockerに入っていない事が原因でした。
下記のPHPファイルを作成して実行したところ、エラーになり気付きました。

<?php
$pdo = new PDO('mysql:host=【ホスト名】;dbname=【DB名】', '【ユーザーID】', '【パスワード】');
echo "Connected to the database!";

初歩的なミスでしたね…

解決方法

Dockerfileに下記を追加しpdo_mysqlをインストールしました。まずはphp.iniの下記のコメント削除

;extension=pdo_mysql
RUN docker-php-ext-install pdo pdo_mysql

コマンドを実行し再ビルド。念の為初期化してます。

docker-compose down --rmi all --volumes --remove-orphans
docker-compose build --no-cache
docker-compose up -d

Laravelのenvは下記で記載しております。
色々と検索した所、ホスト名はサービス名と書かれておりましたが、私はローカルで出来ました。
(ローカルでLaravelを実行しているから?)

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=【ポート番号】
DB_DATABASE=【DB名】
DB_USERNAME=【ユーザ名】
DB_PASSWORD=【パスワード】

Docker難しいですね。
これでやっとLaravel開発出来そうです。

ゴリラさん

PHPエンジニアになりたいがプロマネとかVBAなど色々やります。 インコと一緒にいることが生きがい

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です