如何将 .war 从 docker-composer 移动到主机的值文件夹?

Posted

技术标签:

【中文标题】如何将 .war 从 docker-composer 移动到主机的值文件夹?【英文标题】:How can i move .war to value-folder of host machine from docker-composer? 【发布时间】:2018-11-16 09:42:47 【问题描述】:

我有一个作曲家文件:

version: '2'
services:
        applic:
              image: tomcat
              ports:
                    - "8082:8080"
              depends_on:
                    - rabbit_image
                    -packager
              volumes:
                    - "/home/ustin/second_try/common_data:/home"
       rabbit_image:
              image: rabbitmq
              ports:
                    - "15673:5672"
       packager:
              build:
                     context: ./maven_images
                     dockerfile: Dockerfile
              volumes:
                    - "/home/ustin/second_try/common_data:/home"

和 Dockerfile:

FROM maven
RUN mkdir clonefolder && cd clonefolder && git clone <repo.git> && cd docker-test-task && mvn clean package && cd target/ && cp docker-test-task-1.0.war /home && cd /home && ls

主要思想:在带有 maven 的映像中使用 Dockerfile 我想克隆 repo,使用“clean package”命令创建 .war 文件并将其放置到“/home”文件夹中,该文件夹之前被定义为卷文件夹并与主机上的“/home/ustin/second_try/common_data”。目前,我希望主机上有 .war 文件。然后我想把这个 .war 放到其他图像上,然后把这个文件放到 tomcat 中。

问题是:为什么我在 /home 文件夹中的图像中找不到 .war 文件(但 cp 命令成功),而不是在主机文件夹中? (ubuntu)

所有步骤 - 完成: 重新构建:http://prntscr.com/jrolk7 或缓存:http://prntscr.com/jrolun

【问题讨论】:

【参考方案1】:

您正在一个 RUN 指令中运行所有命令。您正在构建一个包含已编译 .war 文件的一层的映像。

简短的回答是,您需要使用此映像运行一个容器,并将您的文件docker cp 从中取出到您的主机上。

长答案是您应该考虑创建一个可重用的映像,该映像将动态构建您的 WAR 文件并使用卷输出到您的主机。

以下是有关 Dockerfiles 最佳实践的一些信息:https://docs.docker.com/develop/develop-images/dockerfile_best-practices/

【讨论】:

好的,但我不明白我应该在哪里运行“docker cp”命令。在作曲家文件中当前服务的“命令”块中?( 首先你需要使用镜像启动一个容器。请参阅此处的文档:***.com/questions/18497688/… 启动容器后,您可以对容器运行docker cp。在此处查看更多信息:docs.docker.com/engine/reference/commandline/cp 请注意,这不是针对此问题的长期推荐解决方案 - 上面的“长答案”选项更可取且可维护。

以上是关于如何将 .war 从 docker-composer 移动到主机的值文件夹?的主要内容,如果未能解决你的问题,请参考以下文章

如何将环境变量从 docker-compose 传递给项目?

如何从 Eclipse 将 Maven 项目的 WAR 部署到 JBoss 服务器?

如何使用命令提示符将war文件部署到tomcat?

JavaEE - WAR - 已部署 :: 如何从资源目录中读取文件 [重复]

使用 docker-compose 从私有仓库拉取镜像

如何使用 Maven 将 .war 复制到 Tomcat 的 webapps 目录?