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だとその辺は解決しており、普通にカスタムネットワーク設定してコンテナ名で接続するとちゃんと名前解決してくれるとか。
関連記事
-
-
Podmanで作成したApache用コンテナにLet's Encryptを導入しHTTPS接続できるようにする方法
先日Podmanで作成したApache用コンテナに対してドメインを割り当てたが、 ...
-
-
PodmanでMailpit用コンテナを作成しPHPからテストメールを送受信する方法
開発中などでPHPからテストメールを送信したい。以前メモしたmailtrapを使 ...
-
-
Podmanコンテナ環境にWordPressを導入の上、パーミッション等の各種設定を行う方法
Podmanコンテナ環境にWordPressを導入したい。何も考えずにWP関連の ...
-
-
AlmaLinux8系にNginxを導入しPodmanコンテナに接続する方法
AlmaLinux8でホスト側はApacheからPodmanコンテナ環境に接続し ...
-
-
PodmanにComposerを導入し、パッケージをインストールする方法
先日Podmanで導入したapache-phpに各種PHPモジュールを追加したが ...