总结:
我提取了一个tomcat图像,并设法添加了一个 .war
文件保存到其usr/local/webapps目录。这个新实体是一个容器,当我在本地运行它时,它在本地主机上运行得非常好。我能看到那张照片 .war
在webapps目录中。
我想让它成为一个独立的、准备好使用deployment的实体,据我推测,这意味着我需要将它自身转化为一个图像,所以我这样做: docker commit theContainer newImage
创造新的形象。 docker run -p 8080:8080 newImage
运行新映像。 lsof -i :8080
验证端口Map。
…并查看确实有一个进程正在侦听端口。到现在为止,一直都还不错。
接下来,我想验证newimage是否包含 .war
文件,因此,在它运行时,我运行: docker exec -it newImage /bin/bash
cd webapps ls
…我很高兴能看到并浏览newimage的文件系统。不幸的是, usr/local/webapps
是空的。
当然,在浏览器中打开localhost:8080(并尝试所有预期的servlet)会产生
http状态404–未找到源服务器未找到目标资源的当前表示形式,或者不愿意透露存在该表示形式。
因此,新图像运行,但应用程序丢失。我固执地这样做了十几次,一路上检查了所有步骤,没有任何改进。很明显,我遗漏了一些关键信息。
经过多次搜索,我还制作了dockerfile和docker-compose.yml文件,如下所示:
来自tomcat:最新
添加target/theapp-1.0-snapshot.war/usr/local/tomcat/webapps/
曝光8080
cmd[“catalina.sh”,“run”]
版本:“3”
services:
app:
build: .
image: newImage
ports:
- 8080:8080
同样,当我在本地运行newimage时,它会起作用,但当我尝试将它推送到docker hub,然后拉它来测试它时,如果失败,则它缺少复制到其中的.war文件。
因此,我寻求(并提前感谢)对docker的深奥和我无知的本质的任何洞察。
目前,我无法理解的是,我可以在运行时成功修改图像 docker commit
国防部丢失了。我在某个地方读到,commit不会持久化数据,但我不确定这是否适用于 .war
文件
docker版本:19.03.12
os:macos highsierra 10:13:6
项目: https://www.jetbrains.com/help/idea/deploying-a-web-app-into-an-app-server-container.html
免责声明:noob。
谢谢你,极客们。
1条答案
按热度按时间xxls0lw81#
解决的问题:
跑
docker-compose up
在上面的docker compose和docker文件中,创建了容器。跑
docker commit theContainer newImage:latest
唯一的区别是增加了:最新的。运行newimage,检查文件(当前),推送到docker hub,拉动并测试,一切正常。
如果好奇,请查看图片:
docker pull manningpart4/tomcat_test:latest
(确保Map端口ie:'docker run-p[您的端口]:8080 tomcat_测试:最新')