如何将 .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 服务器?