如何从浏览器访问运行在Docker容器中的Tomcat?

26

我正在从官方仓库中的Docker容器中运行Tomcat。

docker pull tomcat

按照主页中的指南,我已经运行了该实例,Tomcat服务器已启动。

docker run -it --rm -p 8888:8080 tomcat:8.0

Tomcat服务器可在端口8888上使用。当我执行以下命令时,我可以在boot2docker中获取响应。

Tomcat服务器可用于端口8888。执行以下命令时,我能够在boot2docker中接收到响应。

curl localhost:8888

但我想从我的电脑上安装的web浏览器中访问该页面(这台电脑在Virtual Box之外,是安装在我的Windows系统中的)。我可以吗?如果可以,怎么做?

但我希望从我安装在个人电脑上的web浏览器中访问该页面(不在Virtual Box中,而是安装在我的Windows操作系统上)。我能吗?如果可以,如何操作?
5个回答

26

您可能在VirtualBox设置中缺少端口转发规则。

boot2docker vm > settings > Network > NAT adapter > Port forwarding

请注意最后一条目录:

enter image description here

通过这种方式,您已配置整个链:hostPort:virtualBoxPort然后virtualBoxPort:containerPort,如下图所示: enter image description here


1
太好了!谢谢 :) 所以,类似于开始使用新端口的方式,我们需要将它们添加到端口转发规则中。我是对的吗?顺便问一下,什么是主机端口和客户端口? - JavaTechnical
您可以更新start.sh Shell脚本(与Boot2Docker安装一起提供),以便一劳永逸地设置所需的端口转发规则。例如,请参见https://github.com/docker/docker/issues/4007#issuecomment-34573044。否则,您可以按照上述描述手动添加它们。 - tduchateau
“Host port” 是指您计算机(PC)上的端口。而“guest port”则是指虚拟机(VirtualBox)上的端口。 - tduchateau
但是我为“Guest”和“Host”端口设置了相同的端口号,但它仍然对我有效!在我的示例中,“8080”是要映射到主机上的“8888”的客户端口。但是,我复制了您截图中的内容。这怎么可能呢? - JavaTechnical
1
我刚刚添加了一个图表以便澄清。希望它足够自解 :-) - tduchateau
1
对于不确定如何添加它的人,仅供参考。开始->虚拟盒->点击您的盒子->设置->网络->端口转发,然后您可以添加上述设置。 - Jack

8
自几个月前 Docker-Tools 推出以来,似乎有一个更好的答案可用。如果您没有使用 Docker Tools,请查看https://docs.docker.com/machine 如果您正在使用 Docker Tools,则需要:
1. 使用$ docker-machine ls查找 Docker 机器名称 2. 使用$ docker-machine ip <machine-name>查找 Docker IP 地址 3. 使用 IP 地址进行连接,例如$ curl 192.168.99.100

3
运行boot2docker ip命令获取您的docker桥接的IP地址。然后,您可以运行curl BRIDGE_IP:8888命令。 IP地址类似于192.168.59.103。使用boot2docker时,虚拟机的网络堆栈不在本地主机上,而是在虚拟接口上运行。

获取VM Host only IP地址失败。VM是否使用boot2docker初始化?我遇到了这个错误。 - JavaTechnical
我修改了start.sh文件,成功获取了IP地址,但是仍然无法在浏览器中打开http://192.168.59.105:8888,但是我可以使用`curl`在boot2docker中获得响应。 - JavaTechnical
当我从Windows shell运行时,我看到了同样的情况,并发现boot2docker ip命令必须从Git Bash shell运行。 - bnieland

1
使用docker-machine ls命令获取运行容器的Virtual Box实例的IP地址。然后将其与您暴露的相关端口一起使用,我的情况是8080,因此它是http://192.168.99.100:8080

1
选项-p有参数hostPort:containerPort,所以在您的情况下,端口8080(在您的Docker镜像内部)映射到主机上的端口8888(您的Windows电脑)。这意味着您应该能够通过在URL末尾添加:8888来找到您的Windows电脑上的Tomcat,就像使用curl一样。请注意保留HTML标记。

2
不,当我尝试在浏览器中打开http://localhost:8888时,我遇到了“无法连接”的错误。 - JavaTechnical

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