localhost
別名: ループバック / loopback / 127.0.0.1
自分自身のマシンを指す特別なホスト名。
名前解決では常にループバックアドレス(IPv4 の 127.0.0.1、IPv6 の ::1)になり、ネットワークに出ずに同じ OS 上で動くサーバへ接続するために使う。
公開:
定義
localhost は「このマシン自身」を指す特別なホスト名である。RFC 6761(新しいタブで開く) は名前解決ライブラリに対し、localhost を特別扱いして常にループバックアドレス(IPv4 の 127.0.0.1、IPv6 の ::1)を返すよう求めている。
DNS に問い合わせて決まる名前ではなく、プロトコルの規定として解決結果が固定されている名前だと考えればよい。
詳細
ループバックアドレス宛の通信は物理的なネットワークインターフェースに出ず、同じ OS のカーネル内で折り返される。
そのため localhost:3000 は「この OS で 3000 番ポートを LISTEN しているプロセス」を指す。
ここで効いてくるのは「この OS」が何を指すかで、Docker のコンテナや WSL 2 は独立したネットワーク名前空間を持つため、コンテナ内の localhost とホスト側の localhost は別物になる。
IPv6 が有効な環境では localhost が先に ::1 へ解決され、IPv4 しか待ち受けていないサーバに届かないこともある。
よくある誤解
- localhost と 127.0.0.1 は常に同じ: 解決先が
::1になる環境や、MySQL クライアントのように localhost 指定だと TCP ではなく UNIX ソケット接続に切り替わるものがあり、挙動が変わる。 - コンテナの中から localhost でホストに届く: コンテナ内の localhost はコンテナ自身を指す。
ホスト側へはhost.docker.internalなどの別名を使う。
関連
Can't connect to MySQL server や WSL2 の localhost にアクセスできない は、どの「自分自身」を指しているかの食い違いが原因になりやすい。