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
目录中,这会导致它作为上下文目录的一部分传输到守护进程。