繁体   English   中英

在Dockers中对端点进行REST调用

[英]Making a REST Call to Endpoint in Dockers

我正在构建一个Spring Boot应用程序,它具有几个不同的REST端点。 可以将其本地打包并成功作为jar文件启动。 在本地运行时,我可以通过“ http:// localhost:8080 / endpoint?params ..”访问其端点。 我的任务是现在准备将此应用程序运行在Docker之外。 仍在我的本地计算机上工作,我基于Java:8映像创建了一个Dockers容器。 在此容器中,我已经能够从.jar成功运行我的应用程序。 我的问题是,从Docker托管应用程序时,我不理解如何调用应用程序内的REST端点,因为从逻辑上讲localhost:8080 / endpoint不再响应该调用。

辅助信息:我的本地计算机是Windows,Docker映像是Ubuntu(最终将在Linux服务器上启动)。

更新:使用以下Dockerfile创建了一个新映像:

FROM openjdk:8
MAINTAINER  My Name email@email.com
COPY . /usr/src/myapp
WORKDIR /usr/src/myapp
EXPOSE 8080
RUN javac Main.java
CMD ["java", "Main"]

同样的问题,无法通过http:// localhost:8080 / endpoint访问端点

任何帮助将不胜感激。 谢谢!

您需要发布端口(而不是EXPOSE端口)。 公开端口主要用于链接和服务上下文。 在仅运行Docker容器的示例中,您只需简单地发布端口,以便主机可以使用它。 您可以使用--publish-p进行此--publish

docker run -d --name myapp -p 8080:8080 myappimage

然后,您可以在主机IP地址的端口8080上访问应用程序(Windows上的Docker和Mac上的Docker运行应允许localhost:8080正常工作的代理)。

如果您的应用程序在Docker容器内运行,并且您可以使用localhost:8080 从该容器内部进行访问,那么您要做的就是在DOCKERFILE中添加EXPOSE指令(请参阅Dockerfile暴露选项 )。

EXPOSE 8080

然后,您可能将能够使用来自docker0网络接口的默认IP从主机(安装并运行Docker的主机)进行访问。 通常,此IP为172.17.0.X,其中第一个容器的X为2,依此类推(请参阅docker default network )。

因此,尝试使用“ http://172.17.0.2:8080/endpoint?params ..”从泊坞窗外部进行访问。 另外,如果要允许外部访问(或从主机使用localhost访问),则应使用-p参数从EXPOSE指令启动容器映射端口(请参阅映射暴露的传入端口 )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM