2016-09-05 72 views
1

當與docker玩時,我發現了一些奇怪的東西(至少對我來說)。我通過以下方式創建了一個容器:碼頭:端口映射不適用於非默認機器

docker run -p 8080:80 nginx 

無論我嘗試什麼。我從http://localhost:8080看不到任何東西。最後我想通了我做了

eval $(docker-machine env foo) 

並切換到不同的機器。當切換回默認機器時,HTTP服務器再次正常工作。

有人可以解釋爲什麼這是?

我使用Docker for Mac 1.12。

回答

1

我可以從您的信息中猜測您使用的是Docker工具箱(可能是VirtualBox)。 Docker工具箱創建一個Linux主機(基於boot2docker映像),並在該主機內運行你的nginx容器。 -p 8080:80會將nginx中的端口80導出到主機上的8080 。因此,要從您的計算機訪問它,您需要使用http://HOST-IP-ADDRESS:8080

您可以通過使用docker-machine ls

到碼頭工人的替代工具箱是使用泊塢窗的Mac或碼頭的Windows(谷歌他們)找到你的主機IP。這些消除了對VirtualBox的需求。您的計算機實際上成爲運行Docker容器的主機。在這種情況下,運行http://localhost:8080會給你的nginx服務器。

+0

謝謝。我使用Docker for Mac 1.12。事實上,如果我使用駐留機器的IP,它就可以工作。但是,仍然是默認機器背後有什麼魔力? – lang2

+0

Docker 4 mac安裝了一個名爲[xhyve](https://github.com/mist64/xhyve)的非常小的管理程序。然後創建一個Alpine Linux主機,並在其中運行docker守護進程。默認情況下,容器以'host'模式運行,這意味着它們共享Alpine Linux主機網絡堆棧,它本身共享OSX網絡堆棧(本地主機)。 雖然這對用戶來說都是透明的。當您在Mac上使用Docker客戶端時,看起來好像OSX是主機。 – Alkaline

+0

最後一個問題:關於透明部分:是橋接嗎? – lang2