Docker使用添加的Java应用程序创build一个新的映像

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

bash-3.2 $ pwd / Users / czou / workspace / echodocker

bash-3.2 $ cat Dockerfile

从dockerfile / java:latest

维修人员XY

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

EXPOSE 8080

EXPOSE 8081

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

binconfigurationlib

我们运行“docker build”,它总是给我:

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

文档要求构build的上下文,它是什么意思? 我发现它很混乱…..

java应用程序的结构

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"] 

构build和运行图像的命令

  • 进入项目目录。让我们说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中使用Docker查找video

在你的情况下构build的上下文是你的echodocker所在的echodocker目录。 上下文目录的内容被传送到Docker守护进程(与terminal上运行的docker命令不同),这是实际执行构build命令的地方。 这意味着它只能访问上下文目录中的内容。 在这种情况下,您正在尝试在上下文目录之外添加一些传输到Docker守护程序的内容。 所以,这是行不通的。

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