我设置了几个相互交互的容器。主应用程序容器在 --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,而不是手动创建网络、将容器附加到网络等。
关于macos - 在 MacOS 上使用 --network=host 运行 docker 容器时如何访问主机上的端口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59625225/