【发布时间】:2021-05-14 17:22:30
【问题描述】:
我有这个 Dockerfile:
FROM tomcat:10-jdk8
MAINTAINER your_name
# COPY path-to-your-application-war path-to-webapps-in-docker-tomcat
COPY demo-0.0.1-SNAPSHOT.war /usr/local/tomcat/webapps/
WAR 是一个只有这个控制器的 Springboot 应用程序:
@Controller
public class HelloController {
@GetMapping("/hello")
public String sayHello(@RequestParam(value = "name", required = false, defaultValue = "World") String name, Model model) {
model.addAttribute("user", name);
return "hello";
}
}
我已经构建了映像并运行了容器。但是,当我点击 http://localhost:8080/hello 时,我得到一个 404。容器内的日志说应用程序已经部署:
10-May-2021 08:57:13.253 INFO [main] org.apache.catalina.startup.HostConfig.deployWAR Deploying web application archive [/usr/local/tomcat/webapps/demo-0.0.1-SNAPSHOT.war]
10-May-2021 08:57:14.882 INFO [main] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
10-May-2021 08:57:15.043 INFO [main] org.apache.catalina.startup.HostConfig.deployWAR Deployment of web application archive [/usr/local/tomcat/webapps/demo-0.0.1-SNAPSHOT.war] has finished in [1,790] ms
为什么我会收到 HTTP 404?
编辑:我用来运行容器的命令是:
docker run -p 8080:8080 0ae485a6f486
我已按照这些说明创建可部署的 WAR https://docs.spring.io/spring-boot/docs/current/reference/html/howto.html#howto-create-a-deployable-war-file 虽然没有成功。
我的演示项目可以在这里找到:https://github.com/th3r10n/spring-boot-war
我将它构建为:
./mvnw package
【问题讨论】:
-
我认为 WAR 将部署在 tomcat 中,因此访问 hello servlet 的 URL 默认为 localhost:8080/demo-0.0.1-SNAPSHOT/hello。如果您希望使用不同的路径,则需要调整部署选项(WAR 的名称、部署到的路径等)。
-
您能否添加您的“docker run”命令或您的“docker-compose”,以便我们提供帮助
-
嗨@Marvin,我使用的命令是 docker run -p 8080:8080 0ae485a6f486
-
嗨@JohnFergus,结果相同,即 404,只是消息不同:请求的资源 [/demo-0.0.1-SNAPSHOT/hello] 不可用
-
无法访问您的应用程序(以及您如何构建它)我无法诊断问题。可能有很多问题导致问题 - 一个快速的谷歌抛出了很多类似的问题,需要尝试各种事情。这可能是您构建 WAR 的方式、它具有哪些 Spring 选项等。
标签: docker http-status-code-404 tomcat8