虚拟上启动的jenkins容器无法通过Windows主机上的浏览器直接访问

问题:
为什么使用bridge模式不能使用window主机访问虚拟机IP:8089端口直接访问虚拟机容器
背景:
使用docker-compose中的bridge模式并且做了8089:8080的端口映射在虚拟机上启动Jenkins容器,容器正常启动,无防火墙,
现象:
使用curl 虚拟机IP:8089端口能正常访问,但是使用window主机访问虚拟机IP:8089端口失败
把docker-compose的模式改host在windows主机上使用虚拟机IP:端口即可访问

以下内容部分参考ChatGPT模型:


问题的原因是在bridge模式下,容器的IP地址是在虚拟网络中,无法直接从Windows主机访问。需要在Windows主机上安装Docker客户端,并使用客户端连接到虚拟机中运行的Docker引擎,然后使用Docker客户端的端口映射功能将容器的端口映射到Windows主机上,这样就可以通过Windows主机访问容器了。

具体操作步骤如下:

  1. 在虚拟机上启动Docker引擎,并在Docker中启动Jenkins容器,使用默认的bridge网络模式,并将容器的端口映射到宿主机上:
docker run -p 8089:8080 jenkins/jenkins:lts
  1. 在Windows主机上安装Docker客户端,并使用Docker客户端连接到虚拟机中运行的Docker引擎:
docker -H ssh://user@192.168.0.100:2375 ps

其中,user是在虚拟机中具有Docker访问权限的用户,192.168.0.100是虚拟机的IP地址,2375是Docker引擎的API端口号。

  1. 在Windows主机上使用Docker客户端的端口映射功能将容器的端口映射到Windows主机上:
docker -H ssh://user@192.168.0.100:2375 run -p 8089:8080 jenkins/jenkins:lts

其中,8089是Windows主机上的端口号,8080是容器的端口号。

  1. 现在就可以通过Windows主机上的浏览器访问Jenkins容器了:
http://localhost:8089

如果我的建议对您有帮助、请点击采纳、祝您生活愉快

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^