在Docker中创buildREST调用端点

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

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

更新:用下面的Dockerfile创build一个新的镜像:

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做到这一点:

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

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

如果您的应用程序在Docker Container中运行,并且您可以使用localhost:8080 从此容器中访问,那么您只需在DOCKERFILE中添加EXPOSE指令(请参阅Dockerfile公开选项 )。

 EXPOSE 8080 

然后,您可能会使用docker0networking接口的默认IP从主机(Docker安装并运行的位置)进行访问。 通常这个IP是172.17.0.X,其中第一个容器的X是2,依此类推(参见docker默认networking )。

因此,尝试使用“ http://172.17.0.2:8080/endpoint?params ..”从docker工以外访问。 另外,如果要允许外部访问(或者使用主机上的本地主机访问),则应使用-p参数(请参阅映射已公开的传入端口 )启动您的容器,从EXPOSE指令中映射端口 。