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でMailpit用コンテナを作成しPHPからテストメールを送受信する方法
開発中などでPHPからテストメールを送信したい。以前メモしたmailtrapを使 ...
-
-
docker-compose.ymlでまとめてコンテナ作成・起動・ネットワーク接続する方法
Podmanでコンテナを作成してネットワーク接続する際、Cockpit上やCUI ...
-
-
Podmanでデータベース用コンテナを作成しWebサーバ用コンテナと接続する方法
Podmanでデータベース用コンテナを作成し、Webサーバ用コンテナからPHPで ...
-
-
ホスト側Nginx&コンテナ環境へのBasic認証、リダイレクト、リライト設定方法
先日コンテナのホスト側をApacheからNginxに変えたが、今度はコンテナ側へ ...
-
-
Podmanで作成したApache用コンテナにドメインを割り当て、ポート指定なしでアクセス可能にする方法
先日PodmanでWebサーバ用コンテナを作成したが、ブラウザからアクセスする際 ...