docker容器中的应用程序不能在net = host的监听端口上访问

我有一个应用程序监听4000端口,需要在一个容器中运行--net=host来简化对主机服务的访问。 根据文档和许多类似的问题--net=host ,我应该能够像telnet localhost 4000一样简单地访问我的应用程序,但情况并非如此:容器中的应用程序无法访问。 如果我运行容器w / out --net=host-p 4000:4000 ,它的工作原理,但不幸的是,我不能去。

  • Docker版本: 17.03.1-ce-mac5 (16048)
  • 操作系统: 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 run命令: 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

请记住,在Mac / Windows上,由于Docker需要Linux内核才能使用瘦虚拟机。 因此,使用--net=host将无法按预期运行,本质上这将使用虚拟机的主机networking。 您应该能够通过访问docker VM的端口4000来validation这一点。

为了您的使用情况,我build议将其他服务移植到docker,如果这不是一个运行本地DNSparsing程序(如dnsmasq)的应用程序应该做的伎俩。 只是让一些域名parsing到您的Mac主机IP。