.war 在 tomcat 在 docker, 404 在 servlet
.war on tomcat on docker, 404 on servlet
我终于找到了使用 Docker 的动力:我尝试在 tomcat 运行ning 上部署一个基本的“hello-world”servlet,在 [=41] =]容器。
当我 运行 它在由 intelliJ 启动的 Tomcat 上时,这个 servlet 工作得很好。
但是当我将它与 Docker 一起使用时,使用这个 Docker 文件
FROM tomcat:latest
ADD example.war /usr/local/tomcat/webapps/
EXPOSE 8080
CMD ["/usr/local/tomcat/bin/catalina.sh", "run"]
而我build/start image/container:
docker build -t example .
docker run -p 8090:8080 example
index.jsp 在 localhost:8090/example/ 上正确显示,但在 localhost:8090/example/hello-servlet[=16 上尝试访问 servlet 时收到 404 =]
同时,我可以访问 localhost:8080/example/hello-servlet,当我的非 dockerized tomcat 运行s 时,它运行良好.
这是 servlet 代码:
package io.bananahammock.bananahammock_backend;
import java.io.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
@WebServlet(name = "helloServlet", value = "/hello-servlet")
public class HelloServlet extends HttpServlet {
private String message;
public void init() {
message = "Hello World!";
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html><body>");
out.println("<h1>" + message + "</h1>");
out.println("</body></html>");
}
public void destroy() {
}
}
我错过了什么?
自 2021 年 8 月 31 日起(this commit) the Docker image tomcat:latest
uses Tomcat 10 (see the list of available tags)。
您可能已经知道,使用 javax.*
命名空间的软件无法在 Jakarta EE 9 服务器上运行,例如 Tomcat 10(参见 )。因此:
- 如果是新项目,迁移到
jakarta.*
命名空间并在 Tomcat 10 或更高版本上测试所有内容,
- 如果它是遗留项目,请使用另一个 Docker 图片,例如
tomcat:9
标签。
我终于找到了使用 Docker 的动力:我尝试在 tomcat 运行ning 上部署一个基本的“hello-world”servlet,在 [=41] =]容器。
当我 运行 它在由 intelliJ 启动的 Tomcat 上时,这个 servlet 工作得很好。
但是当我将它与 Docker 一起使用时,使用这个 Docker 文件
FROM tomcat:latest
ADD example.war /usr/local/tomcat/webapps/
EXPOSE 8080
CMD ["/usr/local/tomcat/bin/catalina.sh", "run"]
而我build/start image/container:
docker build -t example .
docker run -p 8090:8080 example
index.jsp 在 localhost:8090/example/ 上正确显示,但在 localhost:8090/example/hello-servlet[=16 上尝试访问 servlet 时收到 404 =]
同时,我可以访问 localhost:8080/example/hello-servlet,当我的非 dockerized tomcat 运行s 时,它运行良好.
这是 servlet 代码:
package io.bananahammock.bananahammock_backend;
import java.io.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
@WebServlet(name = "helloServlet", value = "/hello-servlet")
public class HelloServlet extends HttpServlet {
private String message;
public void init() {
message = "Hello World!";
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html><body>");
out.println("<h1>" + message + "</h1>");
out.println("</body></html>");
}
public void destroy() {
}
}
我错过了什么?
自 2021 年 8 月 31 日起(this commit) the Docker image tomcat:latest
uses Tomcat 10 (see the list of available tags)。
您可能已经知道,使用 javax.*
命名空间的软件无法在 Jakarta EE 9 服务器上运行,例如 Tomcat 10(参见
- 如果是新项目,迁移到
jakarta.*
命名空间并在 Tomcat 10 或更高版本上测试所有内容, - 如果它是遗留项目,请使用另一个 Docker 图片,例如
tomcat:9
标签。