假设我想在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 /:没有这样的文件或目录
文档需要构建的上下文,它的真正含义是什么?我觉得它很混乱......
答案 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
查找视频
答案 1 :(得分:0)
您的案例中的构建环境是echodocker
目录,Dockerfile
所在的目录。上下文目录的内容将传输到Docker守护程序(与终端上运行的docker
命令不同),这是实际执行构建命令的内容。这意味着它只能访问上下文目录中的内容。在这种情况下,您尝试在上下文目录之外添加一些内容,即不转移到Docker守护程序。所以,这不会奏效。
要解决此问题,您可以将Dockerfile
放在echoservice-0.1.0-SNAPSHOT
目录中(它将成为您上下文的一部分)。或者,您可以将echoservice-0.1.0-SNAPSHOT
符号链接到echodocker
目录中,这将导致它作为上下文目录的一部分传输到守护程序。