---
title: "DockerコンテナからMacのlocalhostサービスに接続する · Kilobatガイド"
url: "https://kilobat.app/ja/guides/localhost-from-container"
description: "コンテナ内のlocalhostはコンテナ自身を指します。Mac上で動くデータベース、API、モデルサーバに接続するには、host.docker.internalを使います。"
---

開発者向け

# コンテナからMacのlocalhostに接続できない

コンテナにはそれぞれ独自のネットワークスタックがあります。コンテナ内の`localhost`はMacではなく、コンテナ自身を指します。

対象：現在のmacOSバージョンのDocker DesktopとOrbStack。 · 確認日：2026年10月29日

## 症状

- コンテナ内のアプリが`localhost:5432`などのポートで「connection refused」になる。
- 同じURLが、MacのSafariやターミナルでは使える。
- Mac上のモデルサーバやAPIに、開発用コンテナから接続できない。

## 考えられる原因

- **localhostがコンテナを指している。**コンテナは自身のネットワークスタック内でサービスを探しますが、そこでは何も待ち受けていません。
- **ホストのアドレスが変わる。**Dockerのドキュメントによると、ホストのIPアドレスは変わります。代わりに、ホストを指す特別な名前が用意されています。
- **Mac上のファイアウォール。**macOSのファイアウォールや他のファイアウォールアプリが、サービスへの受信接続をブロックすることがあります。

## 確認方法

1. Mac上でサービスが動いていることを確認します。8000は使っているポートに置き換えてください。

   ```
   curl http://localhost:8000
   ```
2. Macのサービスがどのアドレスで待ち受けているかを確認します。

   ```
   lsof -nP -iTCP:8000 -sTCP:LISTEN
   ```

   出力 `*:8000`はすべてのアドレス、`127.0.0.1:8000`はループバックアドレスのみを意味します。
3. イメージにwgetが含まれていれば、コンテナ内からホスト名をテストします。

   ```
   docker exec my-container wget -qO- http://host.docker.internal:8000
   ```

## 解決方法

1. コンテナ内では、`localhost`の代わりに`host.docker.internal`を使います。Docker DesktopとOrbStackはどちらもこの名前に対応しています。
2. アプリの設定で、環境変数などにこのアドレスを指定します。

   ```
   docker run -e API_URL=http://host.docker.internal:8000 my-image
   ```
3. OrbStackでは、代わりにホストネットワークを使うこともできます。その場合、コンテナ内の`localhost`でMacのサービスに接続できます。

   ```
   docker run --net host my-image
   ```
4. それでも接続できない場合は、macOSのファイアウォール設定を確認してください。[macOSのファイアウォールが受信接続をブロックする](https://kilobat.app/ja/guides/macos-firewall-incoming)を参照してください。

## Kilobatを使う場合

1. Kilobatのチェックはコンテナ内ではなく、Mac上で実行されます。`--context container`を付けると、コンテナ内で実行するコマンドが表示されます。

   ```
   kilobat why http://localhost:8000 --context container
   ```
2. ホストされたサービスからMacを呼び出す場合は`--context provider`を使います。すると、localhostはプライベートなのでそのサービスからは届かない、とKilobatが伝えます。

   ```
   kilobat why http://localhost:8000 --context provider
   ```

## よくある質問

**host.docker.internalはLinuxでも使えますか？**

このページはMacを対象としています。Docker Desktop for MacとOrbStackでは、この名前はホストに解決されます。

**コンテナからは接続できないのに、Safariからは接続できるのはなぜですか？**

SafariはMac上で動くので、localhostはMacを指します。コンテナには独自のlocalhostがあります。

## 出典

- [Docker Docs：Explore networking how-tos on Docker Desktop](https://docs.docker.com/desktop/features/networking/networking-how-tos/)
- [OrbStack Docs：Container networking](https://docs.orbstack.dev/docker/network)
- [OrbStackドキュメント：ホストネットワーク](https://docs.orbstack.dev/docker/host-networking)
- lsof(8)、macOS 27.2に付属のmanページ

出典は2026年10月29日に確認しました。manページはmacOSに付属のものです。「ターミナル」で`man <name>`を実行すると開けます。

## 関連ガイド

- [MacからDockerコンテナに接続できない](https://kilobat.app/ja/guides/docker-container-from-mac): Mac上のDockerは、Linux仮想マシンの中でコンテナを実行します。
- [macOSのファイアウォールが受信接続をブロックする](https://kilobat.app/ja/guides/macos-firewall-incoming): macOSのファイアウォールは、ほかのコンピュータからMacへの接続を制御します。
- [1つのサイトやAPIに接続できない原因を見つける](https://kilobat.app/ja/guides/recipes/why-cant-it-connect): インターネットは使えるのに1つのアドレスだけ失敗するとき、Kilobatは各レイヤーを順番に確認します。
- [Macでポートが使用中](https://kilobat.app/ja/guides/port-already-in-use): 1つのTCPポートとアドレスで待ち受けられるプロセスは1つだけです。
