---
title: "無法從 Mac 連到 Docker 容器：連接埠與 IP · Kilobat 指南"
url: "https://kilobat.app/zh-hant/guides/docker-container-from-mac.html"
description: "從 macOS 連到 Docker Desktop 或 OrbStack 中的服務：發布連接埠、使用 localhost，並了解何時可以使用容器 IP 位址。"
---

開發者

# 無法從 Mac 連到 Docker 容器

Mac 上的 Docker 會在 Linux 虛擬機器中執行容器。若要從 macOS 連到容器，通常需要將連接埠發布到 localhost。

適用於：目前 macOS 版本上的 Docker Desktop 和 OrbStack。 · 檢查日期：2026年10月29日

## 症狀

- `curl localhost:8080` 失敗，但服務在容器內正常運作。
- 無法 ping 或連到容器的 IP 位址。
- Mac 上沒有出現 `docker0` 介面。
- 服務在 Linux 上可以用，在 Mac 上卻不行。

## 可能原因

- **連接埠沒有發布。**沒有 `-p` 時，Docker Desktop 不會將連接埠轉送到 Mac。
- **Docker Desktop 上的容器 IP。**Docker 的 Docker Desktop 說明文件指出，從主機無法連到它的 bridge 網路。
- **服務在容器中監聽 127.0.0.1。**這樣只有容器本身能連到它。
- **連接埠配對錯誤。**在 `-p 8080:80` 中，8080 是 Mac 的連接埠，80 是容器的連接埠。

## 如何檢查

1. 列出執行中的容器及其已發布的連接埠。

   ```
   docker ps
   ```

   輸出PORTS 欄位會顯示 `0.0.0.0:8080->80/tcp` 這類配對。沒有配對就表示連接埠沒有發布。
2. 顯示某個容器已發布的連接埠。

   ```
   docker port my-container
   ```
3. 如果映像檔有 wget，就從容器內部測試服務。有回應就表示服務正常。

   ```
   docker exec my-container wget -qO- http://localhost:80
   ```
4. 查看 Mac 上是哪個處理程序在監聽該連接埠。

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

## 如何修正

1. 以發布連接埠的方式啟動容器。第一個數字是 Mac 上的連接埠。

   ```
   docker run -d -p 8080:80 nginx
   ```
2. 從 Mac 用 localhost 和 Mac 的連接埠連線。

   ```
   curl http://localhost:8080
   ```
3. 讓容器中的服務監聽 0.0.0.0，而不是 127.0.0.1。相關設定請參閱該服務的說明文件。
4. 如果 Mac 的連接埠已被占用，請改用其他 Mac 連接埠。請參閱[Mac 上的連接埠已被占用](https://kilobat.app/zh-hant/guides/port-already-in-use.html)。
5. 使用 OrbStack 時，也可以用容器的 IP 位址或它的 `container-name.orb.local` 名稱連線。

## 使用 Kilobat

1. Kilobat 的檢查在 Mac 上執行。如果失敗的程式碼在容器中執行，請使用 `--context container`，報告最後會附上一個要在容器中執行的指令。

   ```
   kilobat why http://localhost:8080 --context container
   ```

## 常見問題

**為什麼在 Docker Desktop 上無法 ping 容器？**

Docker 的說明文件指出，Docker Desktop 無法將流量從 Mac 路由到 Linux 容器。請改為發布連接埠。

**OrbStack 的運作方式不同嗎？**

是的。OrbStack 的說明文件指出，從 Mac 可以用 IP 位址和 `.orb.local` 名稱連到容器。

## 資料來源

- [Docker Docs：Explore networking how-tos on Docker Desktop](https://docs.docker.com/desktop/features/networking/networking-how-tos/)
- [Docker Docs：Networking on Docker Desktop](https://docs.docker.com/desktop/features/networking/)
- [OrbStack Docs：Container networking](https://docs.orbstack.dev/docker/network)
- lsof(8)，macOS 27.2 內建的 man 頁面

資料來源檢查日期：2026年10月29日。man 頁面為 macOS 內建版本；在終端機中用 `man <name>` 開啟。

## 相關指南

- [容器無法連到 Mac 上的 localhost](https://kilobat.app/zh-hant/guides/localhost-from-container.html): 每個容器都有自己的網路堆疊。
- [Mac 上的連接埠已被占用](https://kilobat.app/zh-hant/guides/port-already-in-use.html): 同一個 TCP 連接埠和位址只能有一個處理程序在監聽。
- [找出某個網站或 API 連不上的原因](https://kilobat.app/zh-hant/guides/recipes/why-cant-it-connect.html): 網路正常、只有某個位址失敗時，Kilobat 會逐層檢查。
- [Mac 上的連接埠 5000 或 7000 被占用：AirPlay 接收器](https://kilobat.app/zh-hant/guides/airplay-receiver-port-5000.html): Apple 將 TCP 連接埠 5000 和 7000 列為 AirPlay 使用的連接埠。
