我用Java开发了一个Webapp,我想使用Docker在本地测试该网站。
我创建的war文件可以完美运行,但要正确读取,必须将其插入以下路径:
/tomcat/webapps/ROOT/
由于这些原因,我决定使用此表格:
https://hub.docker.com/_/tomcat
我特别决定使用此Dockerfile:
https://github.com/docker-library/tomcat/blob/ec2d88f0a3b34292c1693e90bdf786e2545a157e/9.0/jre11-slim/Dockerfile
我在最后添加了以下代码:
...
EXPOSE 8080
CMD ["cd /usr/local/tomcat/webapps/"]
CMD ["mv ROOT ROOT.old"]
CMD ["mkdir ROOT"]
COPY ./esercitazione.1.maven/ /usr/local/tomcat/webapps/ROOT/
CMD ["catalina.sh", "run"]
我在Windows 10提示符下使用了以下代码:
D:
cd "D:\DATI\Docker-Tomcat-Win10"
docker build -t tomcat-9-java-11:v2.0 .
docker run -it --rm --name tomcat-9-java-11-container -p 8888:8080 tomcat-9-java-11:v2.0
当我在浏览器中输入此链接时:
http://192.168.99.103:8888/
我看到了:
https://prnt.sc/n2vti1
我是Docker和Tomcat的初学者,我需要一点帮助。
在此路径中,我放入了未压缩的.war文件:
D:\DATI\Docker-Tomcat-Win10\esercitazione.1.maven
谢谢
%%%%%%%%%%%%%%%%%%%%%%%%%%
@Shree Tiwari
%%%%%%%%%%%%%%%%%%%%%%%%%%
首先感谢您的帮助!
我删除了Docker上的所有容器和所有图像,并使用了Dockerfile(我只更改了包含要测试的.war文件的文件夹的名称)。
FROM tomcat:9-jre8
ENV JAVA_OPTS="-Xms512m -Xmx1024m -XX:MaxPermSize=256m -XX:MaxMetaspaceSize=128m"
WORKDIR /usr/local/tomcat/webapps/
RUN rm -rf /usr/local/tomcat/webapps/*
COPY ./webapps/*.war /usr/local/tomcat/webapps
EXPOSE 8080
CMD ["catalina.sh", "run"]
我将.war文件放置在以下地址:
D:\DATI\Docker-Tomcat-Win10\webapps\esercitazione.1.maven.war
我打开Windows提示符并输入:
D:
cd "D:\DATI\Docker-Tomcat-Win10"
docker build -t tomcat:v1.0 .
docker run -it --rm --name tomcat-container -p 8888:8080 tomcat:v1.0
我在浏览器中输入了该URL:
http://192.168.99.103:8888/esercitazione.1.maven/
然后再这样:
http://192.168.99.103:8888/
不幸的是,他们都不顺利。
我在创建图像时遇到的唯一错误是:
“安全警告:您正在Windows上针对非Windows Docker主机构建Docker映像。添加到构建上下文中的文件和目录将具有'-rwxr-xr-x'权限。建议仔细检查并重置敏感文件和目录的权限。”
%%%%%%%%%%%%%%%%%%%%%%%%%%
@Miq
%%%%%%%%%%%%%%%%%%%%%%%%%%
首先感谢您的帮助!
我也测试了您的代码,但是它不起作用。
Dockerfile:
FROM tomcat:9-jre11-slim
RUN mv webapps/ROOT webapps/ROOT.old && mkdir webapps/ROOT
COPY ./esercitazione.1.maven/ webapps/ROOT/
代码:
D:
cd "D:\DATI\Docker-Tomcat-Win10"
docker build -t tomcat:v2.0 .
docker run -it --rm --name tomcat-container tomcat:v2.0
浏览器:
http://192.168.99.103:8080/
其他测试:
FROM tomcat:9-jre11-slim
ENV JAVA_OPTS="-Xms512m -Xmx1024m -XX:MaxPermSize=256m -XX:MaxMetaspaceSize=128m"
RUN mv webapps/ROOT webapps/ROOT.old && mkdir webapps/ROOT
WORKDIR /usr/local/tomcat/webapps/
RUN rm -rf /usr/local/tomcat/webapps/ROOT/*
COPY ./webapps/*.war /usr/local/tomcat/webapps/ROOT/
EXPOSE 8080
CMD ["catalina.sh", "run"]
docker ps -a
docker images
docker stop tomcat-container
docker rmi tomcat:v3.0
D:
cd "D:\DATI\Docker-Tomcat-Win10"
docker build -t tomcat:v3.0 .
docker run -d --name tomcat-container -p 8888:8080 tomcat:v3.0
http://192.168.99.103:8888/
%%%%%%%%%%%%%%%%%%%%%%%%%%
其他测试:(2019年4月8日)
FROM tomcat:9.0.17-jre11-slim
LABEL Author="Nome Cognome"
EXPOSE 8080
RUN rm -fr /usr/local/tomcat/webapps/ROOT
COPY ./esercitazione.1.maven.war /usr/local/tomcat/webapps/ROOT.war
CMD ["catalina.sh", "run"]
>
docker build -t tomcat-eb:v.9.0.17 .
docker run -it --rm -p 8888:8080 tomcat-eb:v.9.0.17
>
我要去这里
http://192.168.99.103:8888
浏览器将我发送到这里:
https://192.168.99.103:8443
%%%%%%%%%%%%%%%%%%%%%%%%%%
其他测试:(我选择了另一张图片)
FROM tomee:8-jre-8.0.0-M2-webprofile
LABEL Author="Nome Cognome"
EXPOSE 8080
RUN rm -fr /usr/local/tomcat/webapps/ROOT
COPY ./esercitazione.1.maven.war /usr/local/tomcat/webapps/ROOT.war
CMD ["catalina.sh", "run"]
>
docker build -t tomcat-eb:v.9.0.17 .
docker run -it --rm -p 8888:8080 tomcat-eb:v.9.0.17
>
如果我去这里:
http://192.168.99.103:8888
我看到Tomcat主页,不是我的Web应用程序。
这是没有解决方案的问题吗?
答案 0 :(得分:0)
我在这里看到的最大问题是,您在dockerfile中使用了CMD而不是RUN。 CMD用来定义将在容器运行时运行的命令。现在有了Dockerfile,启动容器时仅执行最后一个,而所有这些mkdir,move等均不会执行。如前所述,您需要使用RUN关键字来指示构建过程应执行并提交为图像层的命令。您可能也不需要catalina.sh CMD,因为它可能来自您所基于的映像,但是您需要在doc页面上检查该基本映像,或者窥视它的Dockerfile或使用docker history imagename
查看用于创建它们的层和命令。
我对此进行了深入研究,并使用了基本图像。除了CMD之外,您的问题还在于您通过运行cd
命令来更改工作目录。 catalina.sh
存在于$CATALINA_HOME
目录中,然后在基础映像中将其标记为workdir。通过执行cd
更改活动目录时,它将中断映像运行时。
我建议您尝试使用以下dockerfile:
FROM tomcat:9-jre11-slim
RUN mv webapps/ROOT webapps/ROOT.old && mkdir webapps/ROOT
COPY ./esercitazione.1.maven/ webapps/ROOT/
无需使用EXPOSE
和CMD
,因为它们是在基本映像中定义的。同样,基本映像将WORKDIR定义为$ CATALINA_HOME,这就是执行以下任何命令时的位置(将WORKDIR
设置为cd
,但使用docker样式)。
希望有帮助。
答案 1 :(得分:0)
首先,您需要将代码编译为war文件,然后可以在Dockerfile下面使用
FROM tomcat:9-jre8
ENV JAVA_OPTS="-Xms512m -Xmx1024m -XX:MaxPermSize=256m -XX:MaxMetaspaceSize=128m"
WORKDIR /usr/local/tomcat/webapps/
RUN rm -rf /usr/local/tomcat/webapps/*
COPY ./esercitazione.1.maven/*.war /usr/local/tomcat/webapps
EXPOSE 8080
CMD ["catalina.sh", "run"]