【问题标题】:How to tell docker on mac to use host network for all purpose?如何告诉 Mac 上的 docker 出于所有目的使用主机网络?
【发布时间】:2018-11-24 08:35:46
【问题描述】:

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

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

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

【问题讨论】:

    标签: docker docker-for-mac


    【解决方案1】:

    主机网络驱动程序将按照您期望的方式在 Linux 上运行,但它不会为您提供您在 Mac 和 Windows 上寻找的内容。

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

    主机网络驱动程序仅适用于 Linux 主机,不支持 Docker for Mac、Docker for Windows 或 Docker EE for Windows Server。

    您可以在 Mac 上使用 --network host 启动容器而不会出现错误,但您不会得到预期的结果。

    这背后的原因是 Docker for Mac 和 Windows 应用程序在后台使用虚拟机,而“主机”在这种情况下是指 VM,而不是您的主机。

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

    您可以在 Docker 论坛 herehere 上阅读有关该主题的更多信息。

    完成图片:

    • 如果您正在开发常规 Web 应用程序,请使用 -p 或者最好查看用户定义的网络、docker-compose、Swarm 或 Kubernetes,以便您在构建应用程序时牢记目标。
    • 如果您处于特殊情况并且将在生产环境中使用 --network host 部署您的应用程序,无论出于何种原因,最好在 Linux 机器上进行开发。

    【讨论】:

    • 当我发出 --network host 或 --net=host 时,容器甚至没有启动。有没有可能的解决方法?
    • 我更新了答案,但简短的答案是使用-p。为什么需要这个有什么特殊要求吗?
    • 你也可以使用-P, --publish-all Publish all exposed ports to random ports
    • -P 不太适合我,因为我应该让我想在主机中通信的所有进程都在容器内运行。我的目标是我希望我的应用容器能够与主机上的一个或多个数据库通信。
    • 在这种情况下,请尝试使用主机名 host.docker.internal,如此处所述 stackoverflow.com/questions/24319662/…
    【解决方案2】:

    Mac 不支持 Docker 的主机网络功能,有趣的是 docker run 命令并没有抱怨它。

    如果你想尝试 localhost:port ,那么来自主机nginx 在端口 80 上,你会得到与在 linux 上相同的错误。

    Mac 会出现以下错误:

    $ curl localhost:80
    curl: (7) Failed to connect to localhost port 80: Connection refused
    

    【讨论】:

      猜你喜欢
      • 2023-03-22
      • 2019-06-05
      • 2021-04-14
      • 1970-01-01
      • 2016-05-01
      • 1970-01-01
      • 2020-07-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多