勉強したことのメモ

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だとその辺は解決しており、普通にカスタムネットワーク設定してコンテナ名で接続するとちゃんと名前解決してくれるとか。

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

  関連記事

Podmanコンテナ環境にWordPressを導入の上、パーミッション等の各種設定を行う方法
Podmanコンテナ環境にWordPressを導入の上、パーミッション等の各種設定を行う方法

Podmanコンテナ環境にWordPressを導入したい。何も考えずにWP関連の ...

Podmanで作成したApache用コンテナにLet's Encryptを導入しHTTPS接続できるようにする方法
Podmanで作成したApache用コンテナにLet's Encryptを導入しHTTPS接続できるようにする方法

先日Podmanで作成したApache用コンテナに対してドメインを割り当てたが、 ...

AlmaLinux9系にホスト側NginxとPodmanコンテナ環境を構築する方法
AlmaLinux9系にホスト側NginxとPodmanコンテナ環境を構築する方法

AlmaLinux8系から9系に移行し、さらにLAMP環境からPodmanコンテ ...

Cockipitからコンテナ内のPHPをsystemd timerで自動実行する方法
Cockipitからコンテナ内のPHPをsystemd timerで自動実行する方法

以前Cockpitでsystemd timer設定を行ったが、その際はLAMP環 ...

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

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