我正在尝试部署一个Java api,该api在docker容器内的/ tomcat / webapps /目录中基本上带有.war fie。我能够从其中的Artifactory复制.war文件。因此,现在docker容器中的tomcat结构为:
tomcat / webapps / api.war
问题是,在我将WAR文件复制到那里之后,我不知道java和tomcat是如何工作的,以便WAr文件使用api下的META-INF,WEB-INF目录创建api的目录结构目录。
api.war如何创建api目录?我以为是在启动catlina.sh之后,但显然不是。这是我在dockerfile末尾拥有的dockerfile的一部分(上一部分并不重要,因为tomcat官方dockerfile构建了该映像):
RUN curl -u user:pass -O "http://artifactory.xxx.com:443/artifactory/xx-api/xxapi.war"
RUN mv /usr/local/tomcat/xxapi.war /usr/local/tomcat/webapps/
RUN rm -rf /usr/local/tomcat/webapps/docs && rm -rf /usr/local/tomcat/webapps/examples \
&& rm -rf /usr/local/tomcat/webapps/host-manager $$ rm -rf /usr/local/tomcat/webapps/manager
RUN ls -la /usr/local/tomcat/webapps/
EXPOSE 8080
CMD ["catalina.sh", "run"]
这很好用,并且战争被复制到tomcat目录下,并且catalina.sh成功运行。我需要知道战争在所有这些之后如何创建目录结构。现在我只有战争档案。
谢谢!
08-Aug-2018 16:26:51.927严重[localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployWAR 部署Web应用程序时出错 存档[/usr/local/tomcat/webapps/gp_searchapi.war] java.lang.IllegalStateException:ContainerBase.addChild:启动:org.apache.catalina.LifecycleException:无法启动组件[StandardEngine [Catalina] .StandardHost [localhost] .StandardContext [/ gp_searchapi]] 在org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:758) 在org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:730) 在org.apache.catalina.core.StandardHost.addChild(StandardHost.java:734) 在org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:985) 在org.apache.catalina.startup.HostConfig $ DeployWar.run(HostConfig.java:1857) 在java.util.concurrent.Executors $ RunnableAdapter.call(Executors.java:511) 在java.util.concurrent.FutureTask.run(FutureTask.java:266) 在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 在java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:624) 在java.lang.Thread.run(Thread.java:748)
答案 0 :(得分:0)
默认情况下,当您启动服务器时,tomcat将解压缩war文件以进行部署。
从外观上看,您仅构建了docker映像,并且正在映像构建内部执行RUN ls -la /usr/local/tomcat/webapps/
。
因此,当您启动最近生成的映像时,tomcat将启动(因为您将默认CMD
定义为exec catalina.sh run
)。
您可以使用docker run
命令来开始新映像:
docker run -it --rm -p 8080:8080 <image_name>:<image_version>
您可以使用以下方式查看您的tomcat日志
docker logs container_name
还要注意,您不需要使用tomcat构建映像,您可以将来自docker hub的official image用作基础映像