如何将 HTTP 请求发送到在 docker 容器中运行的服务器?

2022-09-03 05:43:34

我设置了一个java应用程序,它充当Web服务器并处理http请求。我已经测试过它在容器之外工作(它确实可以),但是当在容器中时,我的请求似乎没有到达它。

服务器侦听端口 3971,Dockerfile 如下所示:

FROM java:8
ADD VaultServer /
EXPOSE 3971
EXPOSE 3972
ENTRYPOINT ["java", "-jar", "VaultServer.jar"]

调用根地址应该返回一些东西(通常我会发送一个GET到 http://localhost:3971/)。

我尝试过将“localhost”替换为docker-machine的ip地址,以及我在检查服务器正在运行的容器时获得的IP地址,但似乎都没有响应。当我调用 docker-machine 的 ip 地址时,我得到了ERR_CONNECTION_REFUSED。我还需要启用其他功能吗?


答案 1

您正在执行 EXPOS 3972,它将端口公开给其他链接的容器,但不公开给主机

要将端口暴露给主机,您需要...

docker run -p 3972:3972 ....... etc

你也可以做...

docker run -P

它向主机公开了 EXPOSE 公开的所有端口(这不是默认值 - 您必须在此处使用 -P 标志)


答案 2

您是否在使用 Docker Toolbox???

在我的情况下,正常的Docker安装在我的Windows 10上不起作用,所以我不得不安装Docker工具箱;docker 工具箱添加了一个虚拟机,docker 在其中运行其所有容器。

例如,要访问我的 dockerized 应用程序,我必须使用:http://192.168.99.100:8080/app

此处,192.168.99.100 是虚拟机 IP。

希望它能帮助你!!!!


推荐