我的宠物项目中有以下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
一切都完美无缺 - 图像被创建并可以运行。现在对项目进行一些描述:它是一个基于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
。
有人可以解释一下这种行为吗?
答案 0 :(得分:1)
ADD命令将sources-registry.jar
文件复制到Docker镜像中,以便第一个示例能够执行它。如果要使用容器内的任何其他文件,还需要将它们包含在图像中(使用ADD或COPY)。有关详细信息,请参阅the reference docs