勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ

PHPからMySQLに接続する際「getaddrinfo for xxxxxx failed」エラーの対応方法

Podmanコンテナ環境で直前まではPHP→MySQL接続できていたのに「podman compose up」でコンテナを再作成・起動すると「Warning: mysqli::__construct(): php_network_getaddresses: getaddrinfo for xxxxxx failed: Name or service not known in /path/to/test.php on line xx」エラーとなった。以下に対応方法をメモ。

 

対応方法

対応策1

まずはコンテナ、ネットワークを削除して再作成してみる。また、Podman自体も再起動しDNSのキャッシュをクリアする。

# 一旦コンテナを削除
podman compose down

# ネットワークを削除
podman network prune -f

# Podman自体を再起動
systemctl restart podman

# コンテナを作成・起動
podman compose up -d

対応策2

IPを固定してコンテナを作成し、ホスト指定時はそのIPを用いる。具体的にはdocker-compose.ymlのネットワーク設定に以下のような形でIP指定を行う。

services:

    # Webコンテナ用設定
    web:

        # 中略

        networks:
            web-db-net:
                ipv4_address: 10.89.10.2

    # DBコンテナ用設定
    db:

        # 中略

        networks:
            web-db-net:
                ipv4_address: 10.89.10.5

    # Mailpitコンテナ用設定
    mailpit:

        # 中略

        networks:
            web-mailpit-net:
                ipv4_address: 10.89.20.5

# ネットワーク設定
networks:
    web-db-net:
        driver: bridge
        ipam:
          config:
            - subnet: 10.89.10.0/24
    web-mailpit-net:
        driver: bridge
        ipam:
          config:
            - subnet: 10.89.20.0/24

phpからホスト指定時(wp-config.php編集時等)は上記で指定したIPを記述すること。

 

補足

AlmaLinux8系のPodmanだとAardvark-dns(PodmanのDNS)に問題があり、名前解決がうまいこと動作しない場合があるらしい。そのため固定IPを発行し、そのIPアドレスに対して接続を試みれば名前解決は不要となり、正常に接続できる筈。

尚、AlmaLinux9系のPodmanだとその辺は解決しており、普通にカスタムネットワーク設定してコンテナ名で接続するとちゃんと名前解決してくれるとか。

 - MySQL / MariaDB PHP データベース サーバー Podman

  関連記事

Podmanコンテナの負荷状況や各種情報を確認できるCUIツール「Lazydocke」の導入方法
Podmanコンテナの負荷状況や各種情報を確認できるCUIツール「Lazydocke」の導入方法

Podmanコンテナのメモリ・CPU使用率等の負荷状況を簡単に確認したい。また、 ...

PodmanにComposerを導入し、パッケージをインストールする方法
PodmanにComposerを導入し、パッケージをインストールする方法

先日Podmanで導入したapache-phpに各種PHPモジュールを追加したが ...

Podmanで導入したデータベース(MariaDB)用コンテナのチューニングに関する設定方法
Podmanで導入したデータベース(MariaDB)用コンテナのチューニングに関する設定方法

先日Podmanでデータベース(MariaDB)用コンテナを導入したが、当該コン ...

Podmanでメールサーバ用コンテナ(postfix / dovecot)を導入する方法
Podmanでメールサーバ用コンテナ(postfix / dovecot)を導入する方法

かなり前にCentOS6系にメールサーバを導入する方法をメモしたが、これをPod ...

Mailpitよりも軽量なダミーSMTPサーバー「MailCrab」の導入方法
Mailpitよりも軽量なダミーSMTPサーバー「MailCrab」の導入方法

先日テストメールの受信テストを行えるMailpitコンテナを導入したが、これより ...