Docker工作区中没有添加的文件

我有docker文件

FROM java:8 # Install maven RUN apt-get update RUN apt-get install -y maven WORKDIR /code/ # Prepare by downloading dependencies #ADD pom.xml /mmt/CouchBaseClient/CB-RestAPI/CacheService/pom.xml #RUN ["mvn", "dependency:resolve"] #RUN ["mvn", "verify"] ADD cacheService-0.0.1-SNAPSHOT.jar /code/cacheService-0.0.1-SNAPSHOT.jar ADD couchclient-0.0.1-SNAPSHOT.jar /code/couchclient-0.0.1-SNAPSHOT.jar EXPOSE 4567 CMD ["/usr/lib/jvm/java-8-openjdk-amd64/bin/java", "-jar", "couchclient-0.0.1-SNAPSHOT.jar server cacheService.yml" ] 

当我build立这个文件时,我得到以下输出

 Sending build context to Docker daemon 35.46 MB Step 1 : FROM java:8 ---> 736600fd4ae5 Step 2 : RUN apt-get update ---> Using cache ---> a3466698c29d Step 3 : RUN apt-get install -y maven ---> Using cache ---> d0fb8e77f89a Step 4 : WORKDIR /code/ ---> Using cache ---> 197735d2da02 Step 5 : ADD cacheService-0.0.1-SNAPSHOT.jar /code/cacheService-0.0.1-SNAPSHOT.jar ---> 9ba30f5a2144 Removing intermediate container bd3c072ebbc6 Step 6 : ADD couchclient-0.0.1-SNAPSHOT.jar /code/couchclient-0.0.1-SNAPSHOT.jar ---> ef59315ed7fe Removing intermediate container 0da1a69bdb51 Step 7 : EXPOSE 4567 ---> Running in a2b32799dd6c ---> 3fb2b534d7c5 Removing intermediate container a2b32799dd6c Step 8 : CMD /usr/lib/jvm/java-8-openjdk-amd64/bin/java -jar couchclient-0.0.1-SNAPSHOT.jar server cacheService.yml ---> Running in efb44e2bcdb3 ---> 56637dfacc0d Removing intermediate container efb44e2bcdb3 Successfully built 56637dfacc0d 

但是没有名为代码的目录正在被创build,所以没有文件被添加,即使它没有给出编译错误

使用@VonCbuild议的方法

 ENTRYPOINT ["/usr/lib/jvm/java-8-openjdk-amd64/bin/java", "-jar", "couchclient-0.0.1-SNAPSHOT.jar" ] 

然后使用这个命令来运行图像

 docker run <image> -d <arguments> 

首先,如果<src>的内容已经改变,不要忘记ADD <src>... <dest>可以使Dockerfile的所有后续指令的caching无效。 请参阅“ 最佳做法 ”,并使用COPY而不是ADD

在这两种情况下( ADDCOPY ),如果<dest>不存在,它将在path中与所有缺less的目录一起创build。
所以不需要mkdir

 COPY cacheService-0.0.1-SNAPSHOT.jar /code/ COPY couchclient-0.0.1-SNAPSHOT.jar /code/ 

否则,文件 /code/cacheService-0.0.1-SNAPSHOT.jar/ !中的文件cacheService-0.0.1-SNAPSHOT.jar

最后,要确定这些文件是他们应该在的地方,打开一个bash:

 docker run --rm -it <yourImage> bash 

或者,如果你有一个正在运行的容器:

 docker exec -it <yourContainer> bash 

并检查什么ls /code返回。

也:

 docker run --rm -it --entrypoint /bin/sh <yourImage> -c "ls -alrt" 

OP传奇猎手 在评论中确认文件在那里。

这个问题来自CMD ,它并不完全是以可执行forms出现的。
每个参数应该在自己的引号中:

 CMD ["/usr/lib/jvm/java-8-openjdk-amd64/bin/java", "-jar", "couchclient-0.0.1-SNAPSHOT.jar", "server", "cacheService.yml" ] 

如果将最后一个参数组合在一起,则CMD尝试访问名为“ couchclient-0.0.1-SNAPSHOT.jar server cacheService.yml ”的jar文件,该文件不存在。
因此,错误消息:

 "Error: Unable to access jarfile couchclient-0.0.1-SNAPSHOT.jar server cacheService.yml" 

不要使用CMD ,而应该使用ENTRYPOINT (使用sa执行forms,每个arg使用双引号),并且不要定义CMD
这样,你将添加到你的docker run命令的参数将被传递给ENTRYPOINT (运行java -jar ...

由于“server”,“cacheService.yml”是要传递给正在运行的容器的两个参数:

 ENTRYPOINT ["/usr/lib/jvm/java-8-openjdk-amd64/bin/java", "-jar", "couchclient-0.0.1-SNAPSHOT.jar" ] 

build立,然后:

 docker run --rm -it <image> server cacheService.yml 

一旦你知道它正在工作,以分离模式启动它:

 docker run -d <image> server cacheService.yml 

WORKDIR行之前试试这个:

 RUN mkdir /code