Docker Tomcat 容器在运行 servlet 时给出 404

问题描述 投票:0回答:2

当我运行使用应用程序的 war 文件构建的 Docker 容器时,出现此错误:

HTTP Status 404 – Not Found

Description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.

我使用的网址是

http://<public DNS of my linux machine>:8085/

http://ec2-18-188-198-18.us-east-2.compute.amazonaws.com:8085

Linux 机器是从 Linux AMI 创建的 AWS EC2 实例

我正在从这台机器上运行 docker。

这些是我通过使用

docker ps
获得的 docker 容器端口详细信息

这是我的 Dockerfile

FROM tomcat:9
COPY app.war /usr/local/tomcat/webapps/
EXPOSE 8080
CMD ["/usr/local/tomcat/bin/catalina.sh", "run"]

这是我的 servlet 文件之一,作为其余文件中使用的 java 代码类型的参考

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@WebServlet("/")
public class AdminLogin extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/html");
    

如您所见,我在代码中使用 javax.servlets.* 而不是 jakarta.servlets.*

通常,如果我使用 tomcat 10 但我使用带有 javax.servlets.* 的 tomcat 9,则会出现此问题。

所以我不知道如何解决这个问题。

java docker tomcat amazon-ec2 servlets
2个回答
0
投票

我能够通过更改 Dockerfile 和所点击的 URL 来解决这个问题。

这是新的 Dockerfile

FROM tomcat:9.0-jdk11
RUN cp -r $CATALINA_HOME/webapps.dist/* $CATALINA_HOME/webapps
COPY app.war /usr/local/tomcat/webapps/
EXPOSE 8080
CMD ["/usr/local/tomcat/bin/catalina.sh", "run"]

这是新的网址:

http://<public DNS of my linux machine>:8085/<name of war file>

http://ec2-18-188-198-18.us-east-2.compute.amazonaws.com:8085/app


0
投票

也许这篇文章可以给你解释正在发生的事情: https://forums.docker.com/t/tomcat-give-error-404/95130

根据社区请求,Webapps 文件夹被移动到 webapps.dist文件夹,这意味着webapps文件夹是空的,并且有 浏览器上没有可提供的文件。那是你看到错误的时候 消息源服务器没有找到当前的表示 目标资源或不愿意透露目标资源的存在。

© www.soinside.com 2019 - 2024. All rights reserved.