macos - 在 MacOS 上使用 --network=host 运行 docker 容器时如何访问主机上的端口?

标签 macos docker

我设置了几个相互交互的容器。主应用程序容器在 --network = host 上运行,因为它查询在主机网络上公开的不同端口上运行的多个 mySQL 容器。

我尝试访问主机上的应用程序,但收到错误:

curl: (7) Failed to connect to 0.0.0.0 port 36081: Connection refused

我正在研究安装在 MacOS 上的 Docker。

我读过几个问题,表明 MacOS 上的 docker 在虚拟机上运行。但是从主机访问应用程序的解决方法是什么?有什么方法可以获取所述虚拟机的IP吗?

最佳答案

您无法在 Mac 上使用 --network=host 通过主机端口进行连接,但使用 -p 选项绑定(bind)到主机端口可以。

https://docs.docker.com/docker-for-mac/networking/#/there-is-no-docker0-bridge-on-osx

I WANT TO CONNECT TO A CONTAINER FROM THE MAC

Port forwarding works for localhost; --publish, -p, or -P all work. Ports exposed from Linux are forwarded to the host.

Our current recommendation is to publish a port, or to connect from another container. This is what you need to do even on Linux if the container is on an overlay network, not a bridge network, as these are not routed.

对于您的用例,

您需要创建一个 docker 网络并将数据库和应用程序容器附加到该网络。然后容器将能够通过名称相互通信。您还可以发布应用程序容器端口,以便可以从主机访问它。

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

您可以使用 docker-compose,而不是手动创建网络、将容器附加到网络等。

https://docs.docker.com/compose/

关于macos - 在 MacOS 上使用 --network=host 运行 docker 容器时如何访问主机上的端口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59625225/

相关文章:

jenkins - docker 组成和 Jenkins

bash - 在 docker 入口点脚本中使用 exec 有什么作用?

Docker SCRATCH容器找不到文件

c++ - SCDynamicStoreContext 的函数指针字段有什么用?

Swift - 数组到 macOS 中的 TableView

java - 如何正确抛出运行时异常并重启docker容器

docker - 如何在 ubuntu docker 镜像上安装手册页?

linux - 共享库的 Makefile?

c++ - 使 -std=c++11 成为 mac 终端的默认值

python - 安装 mpi4py 时出错