2017-05-04 74 views
0

我有一個應用程序在端口4000上偵聽,並且需要在容器中運行它,使用--net=host來簡化主機上的服務訪問。根據文檔和關於--net=host的許多類似問題,我應該能夠像telnet localhost 4000一樣容易地訪問我的應用,但情況並非如此:容器中的應用無法訪問。如果我運行的容器不帶--net=host-p 4000:4000,它可以工作,但不幸的是我無法與之配合。泊塢窗容器中的應用程序無法在監聽端口上訪問net = host

  • 泊塢版本:17.03.1-ce-mac5 (16048)
  • OS:OS X 10.12.4
  • 泊塢窗運行命令:docker run --rm -it --net=host -v /app/dir:/opt/app --name app-dev bitwalker/alpine-elixir-phoenix:1.4.2 iex -S mix phx.server
+0

發佈您正在使用的Dockerfile和完整運行命令:) – johnharris85

+0

@ johnharris85更新後的碼頭運行命令 – Chvanikoff

回答

1

請記住,在Mac/Windows的使用薄的VM作爲碼頭工人需要一個Linux內核操作。因此使用--net=host將無法​​按預期工作,本質上這將使用虛擬機的主機網絡。您應該可以通過訪問docker VM的端口4000來驗證這一點。

對於您的使用案例,我建議將其他服務移植到docker,如果這不是運行本地DNS解析程序(如dnsmasq)的選項應該做的。只要讓一些域名解析到您的Mac主機IP即可。

+0

聽不清楚,但謝謝澄清。 – Chvanikoff

+0

只是認爲我正在運行「Mac本地客戶端的本機Docker」 - 這是否意味着容器應該使用主機的網絡而不是虛擬機假設在「本地」客戶機中沒有虛擬機?或者我誤解了「本土」的含義? – Chvanikoff

+0

有點誤導是的,Docker客戶端可能是本地的,但您仍然需要Docker守護程序來運行您的容器,並且您總是需要某個Linux內核。最近用於Mac/Windows版本的Docker還與本地主機虛擬化(例如Apple Hypervisor框架和Microsoft Hyper-V)集成。 –