使用docker --net="host"命令,我可以访问端口。

5
当我运行一个监听8090端口的Web应用程序容器时,
使用
docker run -p 8090: 8090 -h =%ComputerName% mycontainer 那么我可以访问 http://localhost: 8090 上的服务。
如果我使用以下命令启动容器:
docker run --net="host" -h=%ComputerName% mycontainer 那么我就无法访问 http://localhost: 8090 上的服务。
为什么会这样?
不是应该使用 -net="host",容器共享主机网络,那么为什么我不能使用 --net="host" 访问 http://localhost: 8090 呢?

可能是What does --net=host option in Docker command really do?的重复问题。 - lvthillo
你手动打开了8090端口的防火墙吗? - lvthillo
1个回答

4

这不是--net=host的功能。

在您的第一个示例中,您将容器的端口映射到主机上,这使您可以通过容器的服务访问它们。

在第二个示例中,您删除了-p选项,因此没有任何端口被映射

--net=host的作用是允许您的容器将主机机器上的端口视为本地容器的端口。所以假设您在主机机器上运行了一个数据库,端口为5000,并且它不在Docker容器中,您可以通过localhost:5000容器内部访问该数据库。(注意 - 这里有一些注意事项,例如Docker for Mac实际上需要使用docker.for.mac.localhost


1
这个答案不正确,你是对的,如果没有-p选项,就不会映射任何端口,但是由于使用了--net=host选项的docker容器现在运行在主机网络上,所以没有必要映射端口。实际上,如果同时使用--net=host和-p port:port选项,会得到一条日志消息,说明当使用--net=host时,-p选项无效。因此,通常情况下OP应该能够连接到localhost:8090,而不能工作的原因必须是其他原因。 - maxeh

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