Docker Mac 替代 --net=host

问题描述 投票:0回答:2

根据这里的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. 我可以覆盖微服务上的数据库地址(它们默认为本地主机)。
  6. 但这涉及到强大的 --env 用法

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

macos docker host
2个回答
16
投票

最简单、最优雅的解决方案是使用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
,您可以从本地主机访问该应用程序。如果应用程序需要与数据库通信,则不需要公开数据库的端口,也不必将其映射到本地主机上,如上所述。 只需在自定义桥接网络中保持应用程序和数据库之间的内部通信即可。


0
投票

Docker Desktop 在 4.34 及更高版本中添加了对“主机网络”的一般支持。要启用您必须登录的功能,请转到设置,在资源中选择网络,然后选中启用主机网络。必须重新启动 Docker Desktop 才能使更改生效

有关详细信息,请参阅文档

© www.soinside.com 2019 - 2024. All rights reserved.