将.war文件添加到docker映像并为部署创建新映像…失败

iyfjxgzm  于 2021-10-10  发布在  Java
关注(0)|答案(1)|浏览(223)

总结:
我提取了一个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。
谢谢你,极客们。

xxls0lw8

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_测试:最新')

相关问题