任务是用Java和Docker构建并部署一个简单的Hello World-Web-应用程序。它应该打印出一个你好的世界!在浏览器中输入IP地址和服务器端口时。我已经在localhost和服务器上使用了以下代码:
在localhost上,我正在“webapps”目录中创建一个名为“root”的新文件夹。我正在与Tomcat的原始“root”目录交换它。在localhost上,我只有“web-inf”文件夹,在“web-inf”文件夹中有我的“web.xml”文件和“类”文件夹。在“类”文件夹中有“helloworld.java”和“helloworld.class”文件。
apache-tomcat-9.0.36/webapps/root/web-inf/web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
<servlet>
<servlet-name>SimpleTryOutApplication</servlet-name>
<servlet-class>HelloWorld</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SimpleTryOutApplication</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
apache-tomcat-9.0.36/webapps/root/web-inf/类/helloworld.java:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWorld extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
PrintWriter out = response.getWriter();
out.println("Hello World!");
}
}
当我在cmd中启动tomcat后,在浏览器中输入localhost:8080时,一切正常。我要得到我的你好世界!
现在,当我在本地计算机上创建一个“root”文件夹的.war文件,然后用FileZilla将本地计算机上的整个“root”目录放到服务器上(root.war文件与“root”目录中的“web-inf”目录位于同一位置)时,我创建了一个docker映像,如下所示:
From tomcat:9.0
Run rm -rf /usr/local/tomcat/webapps/ROOT
ADD /ROOT /usr/local/tomcat/webapps/
CMD ["catalina.sh","run"]
我基本上只是从图像中的tomcat中删除原始的“root”文件夹,并将其替换为root.war文件所在的地方。然后构建映像并运行它:
docker run -p 0.0.0.0:8888:8080
当我在浏览器中输入服务器的IP地址时,我就会得到Hello World!
但现在的问题是,我不想总是在本地计算机上创建.war文件,所以我想在构建docker映像时创建它。所以我从服务器上的“root”目录中删除了“root.war”文件,并创建了一个新的DockerFile:
From tomcat:9.0
Run rm -rf /usr/local/tomcat/webapps/ROOT
ADD /ROOT /usr/local/tomcat/webapps/
WORKDIR /usr/local/tomcat/webapps/ROOT
Run jar -cvf ROOT.war .
CMD ["catalina.sh","run"]
或
From tomcat:9.0
Run rm -rf /usr/local/tomcat/webapps/ROOT
ADD /ROOT /usr/local/tomcat/webapps
CMD ["cd /usr/local/tomcat/webapps/ROOT","jar -cvf ROOT.war ."]
CMD ["catalina.sh","run"]
在我尝试的两个选项中,映像和.war文件都没有问题地构建和运行,但突然间,当我在浏览器中输入服务器的IP-adress时,我只得到一条错误404消息和一个描述:
404
Message: The requested resource [/] is not available
Description: The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.
我不知道发生了什么。唯一的区别基本上是,当它工作时,我在本地创建了.war文件,并手动将其放在服务器上的“root”文件夹中,并将整个“root”文件夹添加到docker映像中的“webapps”文件夹中。在第二次尝试中,我在同一个文件夹中创建了完全相同的“root.war”文件,但在docker映像中。为什么这不起作用?
您的Docker命令在多个方面都是错误的。当您执行以下操作时:
CMD ["cd /usr/local/tomcat/webapps/ROOT","jar -cvf ROOT.war ."]
CMD命令实际上是CMD[“executable,”param1“,”param2“]
cd
命令将忽略剩余的参数,因此在执行cd
时,它不会执行任何其他操作。
此外,您还在jar命令中使用了c
标志。这是创造,不是提取。使用x
参数提取。
但是Tomcat不需要解压缩.war
文件-它会在启动时这样做。所以你真的只需要:
COPY /ROOT /usr/local/tomcat/webapps/ROOT
CMD ["/usr/local/tomcat/bin/startup.sh"]
问题内容: 我尝试在Firefox 15上使用,即使它在其他版本的Firefox和其他浏览器(例如Chrome和Safari)上也无法使用。 当我使用Firefox的检查器查看属性时,将被删除并显示错误“无效的属性值”。MDN和caniuse表示Firefox 4及更高版本支持该功能! 怎么会有时性能喜欢和一些浏览器的工作和在其他无效? 免责声明 :这是所有问题的规范重复,可通过添加供应商前缀来完
我正在尝试部署一个java api,它基本上带有。docker容器中的war fie inside/tomcat/webapps/directory。我能够复制这本书。位于其中的Artifactory中的war文件。现在docker容器中的tomcat结构是:tomcat/webapps/api。war 问题是,在我将war文件复制到那里之后,我不知道java和tomcat是如何工作的,以便war
我试图创建一个zip文件,并通过使用ZipArchive库的PHP脚本下载它。 这个变量包含Amazon S3上托管的图像的URL,所以首先我将它们下载到服务器上,创建zip文件并下载它们。 好心,向导!
我已经设置了一个包含3列的css网格来显示我们的投资组合。我找到了一个Firefox、Internet Explorer和Safari的工作代码。但是在Chrome上,它并没有显示我的网格,所有的图片都在下面。见网址:http://www.ddw-sanitair.be 此外,它不接受“display:none”类的一些图片,因此双/三图像... 有什么建议吗? 我尝试添加网格自动行:270px;
问题内容: 在Docker容器中部署Java项目的Docker方法是什么? 我是否会将战争复制到webapps中: 还是我拿爆炸的战争文件: 通常,如果它是一个普通的容器,则将部署密封的war文件,但是对于docker,这意味着每次您进行较小的更改时都会推送10-20MB的文件,而添加展开的war只会推动差异-.class文件已经改变。 部署爆炸式战争而不是战争档案有不利之处吗? 问题答案: 我想
在docker容器中部署java项目的docker方法是什么? 我是否将战争复制到网络应用程序中: 还是我拿爆炸的战争文件: 通常情况下,如果密封的war文件是一个普通的容器,人们会部署它,但对于docker,这意味着每次做一个小更改时都会推送一个10-20MB的文件,而添加爆炸的war只会推送差异,即。已更改的类文件。 部署爆炸战争而不是战争文件有什么缺点吗?