Docker のコンテナからホストOSに接続するのに「host.docker.internal」というホストが用意されています。
Docker for Mac Stable release notes
Docker For Mac での機能なので、Linux ベースでは利用できないかと思います。
mysql コマンドで Dockerコンテナから、ホストOS(Mac)の MySQL に接続する場合、ホスト名に「host.docker.internal」を指定します。
# mysql -u ユーザ名 -h host.docker.internal -p
mysql>
よって、開発のプログラム上でも「host.docker.internal」をホストで設定して利用できます。
$db_name = 'DB名';
$user_name = 'ユーザ名';
$password = 'パスワード';
$host = 'host.docker.internal';
$dsn = "mysql:dbname={$db_name};host={$host}";
try {
$pdo = new PDO($dsn, $user_name, $password);
echo "接続成功" . PHP_EOL;
} catch (PDOException $e) {
echo "接続失敗: " . $e->getMessage() . PHP_EOL;
exit;
}
# psql -l -h host.docker.internal -U ユーザ名
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+-------+----------+---------+-------+-------------------
postgres | yoo | UTF8 | C | C |
sample | yoo | UTF8 | C | C |
template0 | yoo | UTF8 | C | C | =c/yoo +
| | | | | yoo=CTc/yoo
template1 | yoo | UTF8 | C | C | =c/yoo +
| | | | | yoo=CTc/yoo