Java webapp到在本地主机上的Docker容器中运行的Tomcat 8

对于我的springmvc应用程序,我使用docker-compose.yml

 db: build: ./db ports: - "5432:5432" volumes_from: - app-db-data app-web: build: ./web ports: - "8080:8080" links: - db app-db-data: image: cogniteev/echo command: echo 'Data Container for PostgreSQL' volumes: - /var/lib/postgresql/data 

有两个Dockerfiles

  1. ./web
  FROM tomcat:8-jre8 MAINTAINER Sergii D ADD MyApp-1.0-SNAPSHOT.war /usr/local/tomcat/webapps/ 
  1. 。/D b
 FROM postgres:9.3 MAINTAINER Sergii D ENV POSTGRES_USER admin ENV POSTGRES_PASSWORD pass ENV POSTGRES_DB mydb 

首先我做docker-compose build

第二docker-compose up

之后,应用程序工作不正确在http://192.168.99.100:8080/MyApp-1.0-SNAPSHOT/

但我需要使用http:// localhost:8080 /作为根

我如何configurationtomcat?

尝试将“MyApp-1.0-SNAPSHOT.war”重命名为ROOT.war并将其添加到图像。 您的应用程序将可通过http://192.168.99.100:8080/

另外http:// localhost:8080 /将可用。

据我所知,你有几个解决scheme。 "/MyApp-1.0-SNAPSHOT/"实际上是您的应用程序部署的上下文path

  • 你可以将你的war文件重命名为ROOT.war但这个解决方法有点棘手,我不会为此投票。

  • 更好的解决scheme是将ROOT.xml文件添加到tomcatconfiguration中。

所以你可以添加以下到你的Dockerfile定义

  COPY ./ROOT.xml /usr/local/tomcat/conf/Catalina/localhost/ROOT.xml 

ROOT.xml的内容应该是这样的:

 <?xml version="1.0" encoding="UTF-8"?> <Context docBase="/opt/webapps/MyApp-1.0-SNAPSHOT" path="" reloadable="true" /> 

由于您已经将docker容器中的端口映射到docker中的主机,并且使用"ports" docker-compose ,您可以通过http://localhost:8080访问后端。