java - Dockerized SpringBoot REST api 不支持请求方法“GET”
问题描述
我有一个小的弹簧应用程序,如下所示:
package com.example.demo.api;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RequestMapping("api/factorial")
@RestController
public class TestApi {
@GetMapping
public long factorial(){
long startTime = System.nanoTime();
int i;
double fact=1;
int number=50;//It is the number to calculate factorial
for(i=1;i<=number;i++){
fact=fact*i;
System.out.println("Factorial of "+i+" is: "+fact);
}
long endTime = System.nanoTime();
return (endTime - startTime);
}
}
我已经生成了这个应用程序的一个 jar 并对其进行了 docker 化,如下所示:
FROM openjdk:8-jdk-alpine
ADD ./demo-0.0.1-SNAPSHOT.jar /usr/src/factorial/
WORKDIR /usr/src/factorial
EXPOSE 8080
CMD java -XX:+PrintFlagsFinal $JAVA_OPTIONS -jar demo-0.0.1-SNAPSHOT.jar
然后我运行以下命令运行 docker 容器
docker run --rm --name factorialContainer -p 8080:8080 -e JAVA_OPTIONS="$(cat jvmFlags.txt)" suleka96/factorial:latest
然后我尝试使用 JMeter 向 REST 端点发出 HTTP 请求,如下所示
问题是,当我这样做时,我收到一条错误消息:
org.springframework.web.HttpRequestMethodNotSupportedException:不支持请求方法“GET”
但是,当我在本地运行 spring 应用程序(没有对其进行 docker 化)并从 JMeter 发送请求时,请求成功发送。
我究竟做错了什么?
解决方案
您的应用程序部署在 docker 中,因此它是虚拟机。那是另一台拥有自己IP地址的主机。但是您正在尝试将 GET 请求发送到本地主机。你应该得到你的 docker ip。在 Mac OS 中输入这个来获取 ip
主机> docker-machine ip 默认
访问该页面https://spring.io/guides/gs/spring-boot-docker/在该知识库中有一个关于 mac os 部署的部分
推荐阅读
- python-3.x - 确定并显示哪些年份是闰年或将是闰年
- react-native - 嵌套 Touchable 处理 onPress 而父处理 onLongPress
- c++ - 如何将指针到字符串转换为小写?
- flutter - 除了使用模式来管理状态之外,还有其他方法吗?(扑)
- azure-aks - Azure AKS 动态磁盘 - 为 Azure 资源命名
- flutter - FadeInImage onFocusChange 重新生成
- python - 将用户从数据库添加到 json 文件
- c++ - 返回向量最高值的前 5 个索引的函数
- nlp - 如何让 NLP Recommender 功能发挥作用?
- angularjs - 创建新的 AngularJS 应用程序的问题