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
。
在这两种情况下( ADD
或COPY
),如果<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