Docker – 对执行和音量的误解
我的宠物项目中有一个如下的Dockerfile:
FROM java:8 ADD target/sources-registry-0.0.1-SNAPSHOT.jar sources-registry.jar RUN bash -c 'touch /sources-registry.jar' ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/sources-registry.jar"] EXPOSE 8761
而且一切都很完美 – 图像被创build并可以运行。 现在介绍一下这个项目:这是一个基于maven的项目,在实际执行Dockerfile之前,我必须手动运行mvn package
。
但是,如果我将Dokerfile更改为(因为我不想手动运行mvn package
并想自动运行它)
FROM java:8 RUN ls target RUN ./mvnw package ADD target/sources-registry-0.0.1-SNAPSHOT.jar sources-registry.jar RUN bash -c 'touch /sources-registry.jar' #ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/sources-registry.jar"] EXPOSE 8761
然后执行时,我得到/bin/sh: 1: ./mvnw: not found
。 但是, mvnw
在我的项目文件附近的pom.xml
。
更多,如果我只是跟随Dockerfile
FROM java:8 RUN ls target/
那么我得到ls: cannot access target/: No such file or directory
。
有人可以解释这种行为吗?
- 我的意思是为什么我实际上可以做一些目标文件夹(第一个Dockerfile),即使不存在(第三个Dockerfile)?
- 如何将项目文件(以及哪些文件)复制到创build的容器中?
- 主要问题:为什么第二个Dockerfile不工作? 我怎样才能使它工作?
ADD命令将sources-registry.jar
文件复制到Docker镜像中,以便第一个示例能够执行它。 如果您想使用容器内的任何其他文件,则还需要将它们包含在图像中(使用ADD或COPY)。 有关更多信息,请参阅参考文档