docker 工作区中未添加文件
Files not getting added in docker workspace
我有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" ]
当我构建这个文件时,我得到以下输出
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
但是没有创建名为 code 的目录,因此即使没有编译错误也没有添加任何文件
使用@VonC 推荐的方法
ENTRYPOINT ["/usr/lib/jvm/java-8-openjdk-amd64/bin/java", "-jar", "couchclient-0.0.1-SNAPSHOT.jar" ]
然后使用此命令运行图像
docker run <image> -d <arguments>
在 WORKDIR
行之前尝试此操作:
RUN mkdir /code
首先,不要忘记 ADD <src>... <dest>
can invalidate the cache for all following instructions from the Dockerfile if the contents of <src>
have changed. See "Best practices" and use COPY
而不是 ADD
。
在这两种情况下(ADD
或 COPY
),如果 <dest>
不存在,则会创建它及其路径中所有缺失的目录。
所以不需要 mkdir
。
COPY cacheService-0.0.1-SNAPSHOT.jar /code/
COPY couchclient-0.0.1-SNAPSHOT.jar /code/
否则,文件夹中的文件cacheService-0.0.1-SNAPSHOT.jar
/code/cacheService-0.0.1-SNAPSHOT.jar/
!
最后,要确定文件在它们应该在的位置,请打开 bash:
docker run --rm -it <yourImage> bash
或者,如果您有一个 运行 容器:
docker exec -it <yourContainer> bash
并检查 ls /code
returns.
还有:
docker run --rm -it --entrypoint /bin/sh <yourImage> -c "ls -alrt"
OP Legendary Hunter confirms 文件在那里。
问题来自 CMD
,它不是完整的 exec 形式。
每个参数都应该在自己的引号中:
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
(使用相同的 exec 形式,每个参数在其自己的双引号中),并保留 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" ]
构建然后:
docker run --rm -it <image> server cacheService.yml
一旦您知道它正在工作,就以分离模式启动它:
docker run -d <image> server cacheService.yml
我有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" ]
当我构建这个文件时,我得到以下输出
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
但是没有创建名为 code 的目录,因此即使没有编译错误也没有添加任何文件
使用@VonC 推荐的方法
ENTRYPOINT ["/usr/lib/jvm/java-8-openjdk-amd64/bin/java", "-jar", "couchclient-0.0.1-SNAPSHOT.jar" ]
然后使用此命令运行图像
docker run <image> -d <arguments>
在 WORKDIR
行之前尝试此操作:
RUN mkdir /code
首先,不要忘记 ADD <src>... <dest>
can invalidate the cache for all following instructions from the Dockerfile if the contents of <src>
have changed. See "Best practices" and use COPY
而不是 ADD
。
在这两种情况下(ADD
或 COPY
),如果 <dest>
不存在,则会创建它及其路径中所有缺失的目录。
所以不需要 mkdir
。
COPY cacheService-0.0.1-SNAPSHOT.jar /code/
COPY couchclient-0.0.1-SNAPSHOT.jar /code/
否则,文件夹中的文件cacheService-0.0.1-SNAPSHOT.jar
/code/cacheService-0.0.1-SNAPSHOT.jar/
!
最后,要确定文件在它们应该在的位置,请打开 bash:
docker run --rm -it <yourImage> bash
或者,如果您有一个 运行 容器:
docker exec -it <yourContainer> bash
并检查 ls /code
returns.
还有:
docker run --rm -it --entrypoint /bin/sh <yourImage> -c "ls -alrt"
OP Legendary Hunter confirms
问题来自 CMD
,它不是完整的 exec 形式。
每个参数都应该在自己的引号中:
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
(使用相同的 exec 形式,每个参数在其自己的双引号中),并保留 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" ]
构建然后:
docker run --rm -it <image> server cacheService.yml
一旦您知道它正在工作,就以分离模式启动它:
docker run -d <image> server cacheService.yml