我有一个用java写的web应用程序,它暴露了一些servlet。在同一个应用程序中,有一个index.html与其他页面连接。我部署了war文件,当我使用IntelliJ运行服务器时,一切正常。我看到索引文件暴露在localhost上:8080/Project 30
但是当我试图在docker容器中运行war时,我无法访问servlet。我可以访问index.html的页面,但是当我试图访问一些暴露为servlet的url时,我得到了404。
这是docker compose的代码
version: "3.9" #version of docker-compose
services:
mysql:
container_name: mysql
image: mysql
ports:
- "3307:3306"
environment:
- MYSQL_ROOT_PASSWORD=admin #default password of the MySQL container
volumes:
- ./data:/var/lib/mysql #database data volume
- ./src/main/db:/docker-entrypoint-initdb.d #database files called when the container is built and started for the first time
web:
container_name: tomcat
build: .
ports:
- "8080:8080"
这是docker文件
FROM maven:3.6.3 AS build
# Copy pom.xml to the image
COPY pom.xml /home/app/pom.xml
RUN mvn -f /home/app/pom.xml verify clean --fail-never
# Copy the source code
COPY src /home/app/src
RUN mvn -f /home/app/pom.xml package
#FROM tomcat:latest
FROM tomcat:8.0-alpine
LABEL maintainer="emme"
COPY --from=build /home/app/target/Project30.war /usr/local/tomcat/webapps/
EXPOSE 8080
CMD ["catalina.sh", "run"]
War以正确的方式部署,因为这些是容器
中的文件
Tomcat运行正常,就像我在localhost:8080上一样,我看到了Tomcat的管理页面。我不明白我做错了什么
1条答案
按热度按时间cngwdvgl1#
这个问题似乎与tomcat版本有关。我尝试了tomcat9,所有工作正常