2015-09-30 191 views
0

我剛剛開始對docker進行一些實驗。 在我的Windows主機上,我有一個託管Docker容器的虛擬機。我想在主機和容器之間進行通信,或者可能是其他虛擬機和此容器。Docker:物理機器之間的連接--VM -Docker容器

  • 主機的IP是192.168.2.10與子網掩碼爲255.255.255.0
  • VM的IP是192.168.254.130與子網掩碼爲255.255.255.0
  • 集裝箱獲取IP 172.17.0.13

我已經看到很少有博客談論橋接,但我仍然不確定它以及如何做到這一點。我並不是很喜歡網絡的東西。

一點指導將有所幫助。

感謝

編輯: 我跟着這個bridge-building但不明白什麼IP範圍內給予彌補,所以,我給192.168.254.1/24。命令ip addr show bridge0顯示state UNKNOWN

回答

1

我假設您在Windows上使用Docker,並在Virtualbox上運行Linux主機。請注意,默認情況下,docker-machine會創建一個NAT適配器(帶有一個端口轉發)和一個僅用於主機的適配器,有時,讓不同的機器與正確的IP進行通信會非常棘手。

正如Adrian回答的那樣,您通常通過端口轉發「發佈」端口,但是如果您的容器必須通過多個端口進行通信,並且您只運行一個此類容器/主機,則可以通過docker run --net host ...更容易啓動容器,雙向主機的以太網適配器直接在容器內可見(正如我發現的here)。

+0

感謝您的建議。沒有--net主機我能夠從主機到容器進行通信。我猜如果我這樣做,我也可以反向交流。容器與主機通信有沒有不同的方式? – user3275095

+0

在我理解的主機中,任何其他機器都可以與容器進行通信,如果它的端口已經用'-p'或'--publish'「發佈」,如[這裏]解釋的那樣(https://docs.docker.com/articles/網絡/#綁定端口)。我的問題是,容器使用一個複雜的協議與多個端口,所以配置它們是乏味的。 同樣在一些配置中,許多容器運行在同一主機上,並且端口暴露給其他容器,但不暴露給其他外部機器,這是在啓動容器時Dockerfiles或'--expose'上的'EXPOSE'命令。 – NikoNyrh

2

正常的方式做,這是剛剛發佈的容器上的端口,並使用虛擬機的IP如:

docker run -d -p 80:80 nginx 

然後訪問虛擬機的IP在瀏覽器主機上運行,你應該得到的網頁。

+0

謝謝。我已經這樣做了,但沒有測試服務。它不是一個Web服務,所以我只是PINGED容器的IP,這沒有奏效。無論如何,它的工作沒有任何改變。但是從容器到主機,我認爲我必須遵循@NikoNyrh的建議,或者還有其他方法嗎? – user3275095

+0

如果正確的端口是「發佈」,Ping會工作,我沒有打擾檢查哪一個。 'netstat -peanut'是在主機上和容器內運行的非常方便的命令,用於查看端口如何配置和監聽:) – NikoNyrh

相關問題