使用"--network host"的Docker无法访问应用程序的端口。

13

我有一个运行在Docker中的Spring Boot应用程序,我像这样运行我的应用程序:

docker run  --rm --network host --name myapp1 myapp
但是当我试图从主机访问它时,它失败了:
my_machine:~ root$ curl localhost:8081/someendpoint -v
*   Trying ::1...
* TCP_NODELAY set
* Connection failed
* connect to ::1 port 8081 failed: Connection refused
*   Trying 127.0.0.1...
* TCP_NODELAY set
* Connection failed
* connect to 127.0.0.1 port 8081 failed: Connection refused
* Failed to connect to localhost port 8081: Connection refused
* Closing connection 0
curl: (7) Failed to connect to localhost port 8081: Connection refused

我不明白为什么它不起作用? 在Docker内部可以正常工作。 同时,我的应用程序与外部Docker镜像/互联网的连接没有问题。 请帮忙。


尝试运行以下命令:docker run -p 8081:8081 --network host --name myapp1 myapp - silentsudo
通常情况下,您不需要使用主机网络。移除 --net host 选项,并添加 -p 8081:8081 来发布服务端口,这样做是否有所改善?容器日志中是否有任何提示表明它正在启动的位置? - David Maze
嗨@Adiii!容器已经成功运行。Spring Boot应用程序可以从容器内部访问。 - Alfred Moon
@Adiii 这是一个很好的观点,但我没有像提供的链接中那样的任何绑定。在我的application.yml配置文件中,关于连接性的所有内容都是server.port: 8081。 - Alfred Moon
1
嘿@AlfredMoon,你解决了这个问题吗?我也遇到了同样的问题,但是下一步该怎么做我毫无头绪。谢谢。 - Anton Vetrov
显示剩余9条评论
1个回答

9

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

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

由于你说你正在使用 macOS,所以 --network host 将不能正常工作。我相信其根本原因在于,在Linux之外,使用了虚拟机来托管容器。分享容器网络的主机是虚拟机的主机,而不是物理主机。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接