開發者

無法從 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 上的連接埠已被占用。

  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 名稱連到容器。

資料來源

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