代码之家  ›  专栏  ›  技术社区  ›  user1870400

如何让Mac上的Docker使用主机网络?

  •  1
  • user1870400  · 技术社区  · 6 年前

    如何告诉Mac上的Docker使用主机网络,以便我的Docker容器可以通过localhost或127.0.0.1连接到主机上运行的任何服务?

    docker run --net=host -it myimage 并且容器无法通过本地主机连接到主机上运行的任何内容。我得到连接拒绝错误。

    docker version
    Client:
     Version:      18.03.1-ce
     API version:  1.37
     Go version:   go1.9.5
     Git commit:   9ee9f40
     Built:        Thu Apr 26 07:13:02 2018
     OS/Arch:      darwin/amd64
     Experimental: false
     Orchestrator: swarm
    
    Server:
     Engine:
      Version:      18.03.1-ce
      API version:  1.37 (minimum version 1.12)
      Go version:   go1.9.5
      Git commit:   9ee9f40
      Built:        Thu Apr 26 07:22:38 2018
      OS/Arch:      linux/amd64
      Experimental: true
    
    1 回复  |  直到 6 年前
        1
  •  5
  •   takacsmark    6 年前

    主机网络驱动程序将在Linux上按您预期的方式工作,但它不会提供您在Mac和Windows上所需的内容。

    官方文件中提到: https://docs.docker.com/network/network-tutorial-host/ .

    主机网络驱动程序仅在Linux主机上工作,在Docker for Mac、Docker for Windows或Docker EE for Windows Server上不受支持。

    你可以用 --network host 在Mac上没有错误,但是你不会得到你期望的结果。

    这背后的原因是Mac和Windows应用程序的Docker使用了一个隐藏的虚拟机,“主机”在本例中是指虚拟机,而不是主机。

    如果您想知道Docker是否会在Mac和Windows上实现此功能,请关注此问题 https://github.com/docker/for-mac/issues/2716 .

    你可以在Docker论坛上阅读更多关于这个话题的内容 here here .

    完成图片:

    • 如果你正在开发一个常规的web应用程序,请使用-p,或者最好查看用户定义的网络、docker compose、swarm或kubernetes,这样你就可以在构建应用程序时考虑到最终目的。
    • 如果你处于一个特殊的环境中,并且将在生产环境中使用网络主机部署你的应用程序,不管出于什么原因,最好在Linux机器上开发。