在Dockers中对端点进行REST调用

时间:2017-06-27 15:47:53

标签: java rest docker spring-boot

我正在构建一个Spring Boot应用程序,它有几个不同的REST端点。它可以在本地打包并成功作为jar文件启动。在本地运行时,我可以通过" http://localhost:8080/endpoint?params .."访问其端点。我的任务是准备这个应用程序来运行Dockers。仍然在我的本地机器上工作,我已经创建了一个基于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

访问端点

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

2 个答案:

答案 0 :(得分:5)

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

执行此操作
docker run -d --name myapp -p 8080:8080 myappimage

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

答案 1 :(得分:0)

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

EXPOSE 8080

然后,您可能可以使用docker0网络接口的默认IP从主机(安装和运行Docker)进行访问。通常这个IP是172.17.0.X,其中第一个容器的X是2,依此类推(见Dockerfile expose option)。

因此,尝试使用" docker default networking .."从docker外部访问。此外,如果要允许外部访问(或使用来自主机的localhost访问),则应使用-p参数启动容器从EXPOSE指令映射端口(请参阅http://172.17.0.2:8080/endpoint?params)。