Docker使用添加的Java应用程序创建新映像

时间:2014-07-24 17:24:38

标签: java docker

假设我想在dockerfile / java(来自DockerHub)上分发一个Docker镜像,其中包含一个位于我本地框中的可执行Jar文件。我该怎么办?

  

bash-3.2 $ pwd   /用户/ czou /工作区/ echodocker

     

bash-3.2 $ cat Dockerfile

     

FROM dockerfile / java:latest

     

MAINTAINER X Y

     

ADD ../testing/echoservice-0.1.0-SNAPSHOT/ / data / echoservice

     

EXPOSE 8080

     

EXPOSE 8081

     

bash-3.2 $ ls ../ testing / echoservice-0.1.0-SNAPSHOT /

     

bin config lib

我们运行#docker build。',它总是给我:

../ testing / echoservice-0.1.0-SNAPSHOT /:没有这样的文件或目录

文档需要构建的上下文,它的真正含义是什么?我觉得它很混乱......

2 个答案:

答案 0 :(得分:1)

  

java aplication的结构

Demo
└── src
|    ├── main
|    │   ├── java
|    │   │   └── org
|    │   │       └── demo
|    │   │           └── .java
|    │   └── resources
|    │       └── application.properties
|    └── test
|         └── java
|               └── org
|                   └── demo
|                         └── App.java  
├──── Dockerfile
├──── pom.xml
  

Dockerfile的内容

FROM java:8
EXPOSE 8080
ADD /target/demo.jar demo.jar
ENTRYPOINT ["java","-jar","demo.jar"]
  

构建和运行图像的命令

     
      
  • 转到项目目录。让我们说D:/ Demo
  •   
$ cd D/demo
$ mvn clean install
$ docker build demo .
$ docker run -p 8080:8080 -t demo
  

检查容器是否正在运行

$ docker ps
  

输出

CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS                    NAMES
55c11a464f5a        demo1               "java -jar demo.jar"   21 seconds ago      Up About a minute   0.0.0.0:8080->8080/tcp   cranky_mayer
  

Spring Boot with Docker

查找视频

答案 1 :(得分:0)

您的案例中的构建环境是echodocker目录,Dockerfile所在的目录。上下文目录的内容将传输到Docker守护程序(与终端上运行的docker命令不同),这是实际执行构建命令的内容。这意味着它只能访问上下文目录中的内容。在这种情况下,您尝试在上下文目录之外添加一些内容,即转移到Docker守护程序。所以,这不会奏效。

要解决此问题,您可以将Dockerfile放在echoservice-0.1.0-SNAPSHOT目录中(它将成为您上下文的一部分)。或者,您可以将echoservice-0.1.0-SNAPSHOT符号链接到echodocker目录中,这将导致它作为上下文目录的一部分传输到守护程序。