在Windows PC上使用Docker的Server Tomcat

时间:2019-03-26 20:55:27

标签: docker

我用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应用程序。

  
    

这是没有解决方案的问题吗?

  

2 个答案:

答案 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/

无需使用EXPOSECMD,因为它们是在基本映像中定义的。同样,基本映像将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"]