无法在net=host的侦听端口上访问docker容器中的应用程序

无法在net=host的侦听端口上访问docker容器中的应用程序,docker,docker-networking,Docker,Docker Networking,我有一个应用程序监听端口4000,需要在带有--net=host的容器中运行它,以简化对主机上服务的访问。根据文档和许多关于--net=host的类似问题,我应该能够像telnet localhost 4000一样轻松地访问我的应用程序,但事实并非如此:容器中的应用程序无法访问。如果我运行容器w/out--net=host并使用-p4000:4000,它会工作,但不幸的是我不能使用它 Docker版本:17.03.1-ce-mac5(16048) OS:OS X 10.12.4 docker

我有一个应用程序监听端口4000,需要在带有
--net=host
的容器中运行它,以简化对主机上服务的访问。根据文档和许多关于
--net=host
的类似问题,我应该能够像
telnet localhost 4000
一样轻松地访问我的应用程序,但事实并非如此:容器中的应用程序无法访问。如果我运行容器w/out
--net=host
并使用
-p4000:4000
,它会工作,但不幸的是我不能使用它

  • Docker版本:
    17.03.1-ce-mac5(16048)
  • OS:
    OS X 10.12.4
  • docker 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上,使用瘦VM作为Docker需要Linux内核才能运行。因此,使用
--net=host
不会像您预期的那样工作,本质上这将使用VM的主机网络。您应该能够通过访问docker VM的端口4000来验证这一点


对于您的用例,我建议您将其他服务移植到docker,如果这不是一个选项,那么运行本地DNS解析程序(如docker)就可以做到这一点。只需将一些域名解析为您的Mac主机ip。

发布您正在使用的Dockerfile和full run命令(请:)@johnharis85更新了docker run命令的帖子我只是认为我正在运行“Mac客户端的本机docker”-这是否意味着容器应该使用主机网络而不是虚拟机网络(假设“本机”中没有虚拟机)客户或者我误解了“native”的意思?这有点误导是的,Docker客户端可能是native的,但是你仍然需要一个Docker守护进程来运行你的容器,为此你总是需要一个Linux内核。最新的Mac/Windows Docker版本还集成了本机主机虚拟化(例如Apple Hypervisor framework和Microsoft Hyper-V)。