はじめに
docker-composeでPHP用とDB用の2つのコンテナを立てて、PHPのPDOの挙動を確認したところ、 SQLSTATE[HY000] [2002] No such file or directory
というエラーが発生してしまったので、その時の解消方法を備忘のために残しておこうと思います。
リポジトリ
結論
結論としては、新規PDOを作成する際のhost名を、docker-compose.ymlで指定したservice名にすればよかっただけでした。
src/index.php(一部)
-$pdo = new PDO('mysql:host=localhost;dbname=homestead;', 'root', 'secret');
+$pdo = new PDO('mysql:host=db;dbname=homestead;', 'root', 'secret');
解説
composeを起動すると、デフォルトで単一のネットワークが生成され、各コンテナはdocker-compose.ymlで指定したservice名でそのネットワークに参加します。
そのため、各コンテナから別のコンテナにアクセスする際は、ホスト名としてservice名を使用することができるようになります。
参考: Compose のネットワーク機能 - Docker-docs-ja