我试图将一个开源软件放入 docker 容器(https://github.com/att/XACML)中,但在这个容器中我无法使用 maven。运行此服务的文档说要使用 mvn jetty,它工作得很好,但为了将其放入容器中,我不想包含构建步骤(maven)。相反,我想要一种编译战争的方法,这样我就可以将战争复制到容器中并从那里执行它。我尝试了很多尝试,让战争在没有 Maven 码头的情况下运行,但没有一个成功。java -jar /path/to/jar 无主清单属性错误。没有主类,它扩展了一个 HttpServlet使用jetty-runner 当我通过命令行与jetty-runner启动战争时,我没有收到任何错误,但它启动到一个显示文件目录的页面,而不是实际的项目。制作一个“uber-jar”来打包所有与 1 相同的问题,得到一个没有主要清单的问题。如果有帮助的话我可以包含更多代码(pom 文件等),但如果不需要的话我不想添加太多。我对java项目的打包和部署方式非常不熟悉,所以我很难弄清楚需要做什么。谢谢!
1 回答
牛魔王的故事
TA贡献1830条经验 获得超3个赞
Dockerfile
与您的 webapp / war 文件一起使用的最低限度是......
FROM jetty:9.4.18ADD ROOT.war /var/lib/jetty/webapps/
这使用https://hub.docker.com/_/jetty上的官方 jetty docker 镜像
管理于
https://github.com/eclipse/jetty.docker
这个名字
ROOT.war
很特殊,将会把你的 webapp 部署在“root”上下文路径中"/"
塑造形象
如果你像这样构建它......
$ docker build -t stackoverflow/jetty:latest .
运行图像
交互式(这样你就可以记录日志)
$ docker run --interactive --tty --rm --publish 80:8080 stackoverflow/jetty:latest
作为守护进程
$ docker run --detach --publish 80:8080 stackoverflow/jetty:latest
该服务器将在您运行命令的计算机的端口 80 上可用docker run
。
配置 Jetty 基地
如果您需要配置 jetty 映像,您可以使用任何标准start.jar
命令。
例子:
FROM jetty:9.4.18
WORKDIR $JETTY_BASE
RUN java -jar $JETTY_HOME/start.jar --add-to-start=jsp
ADD ROOT.war /var/lib/jetty/webapps/
没有 Maven 时如何工作
详情请参阅官方图片...
https://github.com/eclipse/jetty.docker/blob/master/9.4-jdk11/Dockerfile
关键命令是...
WORKDIR $JETTY_BASE
ENTRYPOINT ["/docker-entrypoint.sh"]
CMD ["java","-jar","/usr/local/jetty/start.jar"]
添加回答
举报
0/150
提交
取消