開發者
無法從 Mac 連到 Docker 容器
Mac 上的 Docker 會在 Linux 虛擬機器中執行容器。若要從 macOS 連到容器,通常需要將連接埠發布到 localhost。
症狀
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 是容器的連接埠。
如何檢查
列出執行中的容器及其已發布的連接埠。
docker ps輸出PORTS 欄位會顯示
0.0.0.0:8080->80/tcp這類配對。沒有配對就表示連接埠沒有發布。顯示某個容器已發布的連接埠。
docker port my-container如果映像檔有 wget,就從容器內部測試服務。有回應就表示服務正常。
docker exec my-container wget -qO- http://localhost:80查看 Mac 上是哪個處理程序在監聽該連接埠。
lsof -nP -iTCP:8080 -sTCP:LISTEN
如何修正
以發布連接埠的方式啟動容器。第一個數字是 Mac 上的連接埠。
docker run -d -p 8080:80 nginx從 Mac 用 localhost 和 Mac 的連接埠連線。
curl http://localhost:8080讓容器中的服務監聽 0.0.0.0,而不是 127.0.0.1。相關設定請參閱該服務的說明文件。
如果 Mac 的連接埠已被占用,請改用其他 Mac 連接埠。請參閱Mac 上的連接埠已被占用。
使用 OrbStack 時,也可以用容器的 IP 位址或它的
container-name.orb.local名稱連線。
使用 Kilobat
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
- Docker Docs:Networking on Docker Desktop
- OrbStack Docs:Container networking
- lsof(8),macOS 27.2 內建的 man 頁面
資料來源檢查日期:2026年10月29日。man 頁面為 macOS 內建版本;在終端機中用 man <name> 開啟。