我试图将一个开源软件放入 docker 容器( https://github.com/att/XACML )中,但在这个容器中我无法使用 maven。运行此服务的文档说要使用 mvn jetty,它工作得很好,但为了将其放入容器中,我不想包含构建步骤(maven)。
相反,我想要一种编译 war 的方法,这样我就可以将 war 复制到容器中并从那里执行它。
我尝试了很多尝试,让 war 在没有 Maven Jetty 的情况下运行,但没有一个成功。
java -jar/路径/到/jar 没有主要 list 属性错误。没有主类,它扩展了一个 HttpServlet
使用 jetty-runner 当我通过命令行使用 jetty-runner 启动 war 时,我没有收到任何错误,但它启动到一个显示文件目录的页面,而不是实际的项目。
制作一个“uber-jar”来打包所有依赖项 与 1 相同的问题,得到一个无主要 list 问题。
如果有帮助,我可以包含更多代码(pom 文件等),但如果不需要,我不想添加太多。我对java项目的打包和部署方式非常不熟悉,所以我很难弄清楚需要做什么。
谢谢!
最佳答案
使用您的 webapp/war 文件的最小 Dockerfile
是...
FROM jetty:9.4.18
ADD ROOT.war /var/lib/jetty/webapps/
这使用官方的jetty docker镜像
https://hub.docker.com/_/jetty
管理于
https://github.com/eclipse/jetty.docker
The name
ROOT.war
is special, and will deploy your webapp in the "root" context path of"/"
构建图像
如果你像这样构建它......
$ 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
服务器将在您运行 docker run
命令的计算机的端口 80 上可用。
配置 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"]
关于java - 在没有 Maven jetty 的情况下从命令行运行 war ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57714659/