Docker Mac 替代 --net=host

Docker Mac alternative to --net=host

根据此处的 docker 文档

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

The host networking driver only works on Linux hosts, and is not supported on Docker for Mac, Docker for Windows, or Docker EE for Windows Server.

在 Mac 人们使用什么替代品?

我的场景

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

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

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

docker network create my-network

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

$ docker run --network=my-network --name my-app ...
$ docker run --network=my-network --name my-database...

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

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