できない.dev

Unix ドメインソケット

別名: Unix socket / UNIX ソケット / AF_UNIX / ソケットファイル

同じマシン上のプロセス同士が、ファイルシステム上のパスを宛先にして通信する仕組み。
MySQL や PostgreSQL のローカル接続、Docker デーモンへの接続に使われ、TCP のポート番号ではなくソケットファイルを介する。

公開:

定義

Unix ドメインソケットは、同じマシン上で動くプロセス同士が通信するためのソケットである。
TCP が IP アドレスとポート番号を宛先にするのに対し、こちらは /var/run/docker.sock のようなファイルシステム上のパス(ソケットファイル)を宛先にする。
ネットワークを経由しないので、同じホスト内でしか使えない。

詳細

開発でよく出会うのはデータベースと Docker である。
MySQL のクライアントは Unix 系 OS ではホスト名 localhost を特別扱いし、TCP ではなくソケットファイルで接続する。
PostgreSQL の psql も Unix 系 OS では -h を省くとソケット経由になり、ソケットファイルは .s.PGSQL.5432 のようにポート番号を含む名前で作られる。
Docker の CLI はデーモンの /var/run/docker.sock に接続する。
ソケットに入れるかどうかはファイルと同じくパーミッションで決まり、Linux では接続にソケットファイルへの書き込み権が要る。

よくある誤解

関連

PostgreSQL の認証方式は pg_hba.conf の local 行(ソケット)と host 行(TCP)で分かれる。Docker のソケットを一般ユーザーで使うための docker グループは、root 相当の権限を持つ。localhost も参照。

この記事は役立ちましたか?