2016-01-24 108 views
2

這些都是我所採取的步驟:無法從碼頭工人容器內訪問MacOSX的主機端口

Prework:

第一:

docker-machine create -d virtualbox default 

然後,我創建了一個容器以下Dockerfile:

FROM centos:latest

沒有別的 - 只是CentOS的副本。我內置容器:

docker build -t mycontainer . 

並運行它:

docker run -it --net="host" --name="test" -p 9200:9200 mycontainer 

問題:當我走在容器內,並嘗試訪問MacOSX上(運行的服務,如簡單的網絡服務器或當地elasticsearch),我得到:

curl localhost:9200 
curl: (7) Failed connect to localhost:9200; Connection refused 

我從泊塢窗VM(docker-machine ssh default)內得到同樣的錯誤。

我嘗試在virtualbox中進行端口轉發,將9200設置爲9200 - 但它沒有幫助。

任何想法?

回答

4

你不能從一個碼頭工人容器與本地主機連接到端口的主機上:端口(除非你用--net="host"運行容器)

您需要指定您的主機的IP地址連接。

請檢查該IP主機上:

dude-server:stackoverflow cwoehrle$ ping $(hostname) 
PING dude-server (192.168.1.169): 56 data bytes 
64 bytes from 192.168.1.169: icmp_seq=0 ttl=64 time=0.053 ms 
64 bytes from 192.168.1.169: icmp_seq=1 ttl=64 time=0.069 ms 

在容器(分別用你的IP):

[email protected]:/# nc 192.168.1.169 9200 

編輯: 要連接到您的主機端口在Mac上你可以使用默認網關地址10.0.2.2,例如nc 10.0.2.2 9200

+0

我用'--net =「host」',但是我發現我可以連接到VM但不是MacOSX。那麼,我需要從虛擬機獲得一個雙向網絡到我的MacOSX? – Xiphias

+2

對不起,我跳過了--net =「host」部分。是的,您可以在virtualbox中將網絡設置爲NAT以訪問主機的端口。儘管如此,我仍然無法連接到localhost:端口,但必須使用'nc 10.0.2.2 9200'連接到主機端口(10.0.2.2是nat連接的默認網關) – christian

+1

哇,現在這就是我喜歡的原因堆棧溢出。我不必使用'nc',甚至不需要'--net =「host」'。我的elasticsearch實例在容器內使用'curl 10.0.2.2:9200'開箱即用。我怎麼知道的? (誠​​實的問題:是10.0.2.2常識嗎?) – Xiphias

相關問題