当我运行使用应用程序的 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,则会出现此问题。
所以我不知道如何解决这个问题。
我能够通过更改 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
也许这篇文章可以给你解释正在发生的事情: https://forums.docker.com/t/tomcat-give-error-404/95130
根据社区请求,Webapps 文件夹被移动到 webapps.dist文件夹,这意味着webapps文件夹是空的,并且有 浏览器上没有可提供的文件。那是你看到错误的时候 消息源服务器没有找到当前的表示 目标资源或不愿意透露目标资源的存在。