Making a REST Call to Endpoint in Dockers
我正在构建一个Spring引导应用程序,它有几个不同的REST端点。它可以在本地打包并作为JAR文件成功启动。在本地运行时,我可以通过"http://localhost:8080/endpoint"访问其端点。帕拉姆…我现在的任务是准备这个应用程序,以摆脱码头工人。仍然在我的本地机器上工作,我创建了一个基于Java:8图像的坞箱。在这个容器中,我已经能够成功地从.jar运行我的应用程序。我的问题是,当应用程序托管在Docker之外时,我不理解如何调用应用程序内的其余端点,因为逻辑上localhost:8080/endpoint不再响应调用。
附加信息:我的本地计算机是Windows,Docker映像是Ubuntu(最终将在Linux服务器上启动)。
更新:使用以下dockerfile创建新图像:
1 2 3 4 5 6 7 | 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访问端点
任何帮助都将不胜感激。谢谢您!
您需要发布端口(不是
1 | docker run -d --name myapp -p 8080:8080 myappimage |
然后,您可以在主机IP地址的端口8080上访问应用程序(Windows上的Docker和Mac上的Docker运行一个代理,该代理应允许
如果您的应用程序运行在Docker容器内,并且您可以使用localhost:8080从该容器内访问,那么您所要做的就是在Dockerfile中添加expose指令(请参见Dockerfile expose选项)。
1 | EXPOSE 8080 |
然后,您可能能够使用Docker0网络接口的默认IP从主机(安装和运行Docker的地方)访问。通常,这个IP是172.17.0.x,其中x是第一个容器的2,依此类推(参见Docker默认网络)。
因此,尝试使用"http://172.17.0.2:8080/endpoint"从Docker外部访问?帕拉姆…此外,如果要允许外部访问(或从主机使用localhost访问),则应使用-p参数从expose指令启动容器映射端口(请参见映射暴露的传入端口)。