Docker Mac 替代 --net=host

Sha*_*non 7 macos host docker

根据此处的 docker 文档

https://docs.docker.com/network/host/

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

在 Mac 上,人们使用哪些替代方案?

我的场景

  1. 我想运行一个将托管微服务的 docker 容器
  2. 微服务依赖于我也通过 docker 运行的数据库
  3. 我以为我可以在运行微服务时在 Mac 上使用 --net=host
  4. 但是微服务端口没有暴露
  5. 我可以覆盖微服务上的数据库地址(它们默认为 localhost)。
  6. 但这涉及强大的 --env 用法

最简单/最优雅的解决方案是什么?

lvt*_*llo 5

最简单、最优雅的解决方案是使用docker命名的网桥网络。您可以像这样创建自定义网桥网络(默认为网桥):

docker network create my-network
Run Code Online (Sandbox Code Playgroud)

部署在该网络中的每个容器都可以使用容器名称相互通信。

$ docker run --network=my-network --name my-app ...
$ docker run --network=my-network --name my-database...
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,您可以使用my-database:port. 如果容器端口在 Dockerfile 中公开,则无需将其映射到主机上,并且可以将所有通信保持在自定义 docker 桥接网络内部。

在大多数情况下,应用程序的端口被映射(例如:),-p 80:80因此localhost:80被映射container:80,您可以从本地主机访问应用程序。如果应用程序需要与 db 通信,则不需要公开 db 的端口,也不必将其映射到 localhost 上,如上所述。只需将应用程序和数据库之间的通信保持在您的自定义桥接网络内部即可。

  • 在 docker for mac 上,您可以使用 host.docker.internal 作为主机来访问 localhost,但这可能仍然无法解决您的真正问题。另外 --add-host 是一个选项,但将 localhost 映射到您的 db 容器名称似乎是一个坏主意 /sf/ask/2192748701/ 31328031#31328031 (4认同)