Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 读取Dockerfile命令时出现问题:是否可以将cd刻录到jar文件中?那么tar-cf做什么呢?_Java_Linux_Docker_Unix_Tar - Fatal编程技术网

Java 读取Dockerfile命令时出现问题:是否可以将cd刻录到jar文件中?那么tar-cf做什么呢?

Java 读取Dockerfile命令时出现问题:是否可以将cd刻录到jar文件中?那么tar-cf做什么呢?,java,linux,docker,unix,tar,Java,Linux,Docker,Unix,Tar,我有以下Dockerfile: FROM openjdk:8 ENV AJSC_HOME=/opt/att/ajsc ENV AJSC_CONFIG_HOME=${AJSC_HOME}/config COPY startService.sh /startService.sh RUN chmod 777 /startService.sh && dos2unix /startService.sh ADD @project.build.finalName@-@assembly.i

我有以下Dockerfile:

FROM openjdk:8

ENV AJSC_HOME=/opt/att/ajsc
ENV AJSC_CONFIG_HOME=${AJSC_HOME}/config

COPY startService.sh /startService.sh
RUN chmod 777 /startService.sh && dos2unix /startService.sh

ADD @project.build.finalName@-@assembly.id@.tar.gz app.jar

ADD prometheus-java-agent.jar monitoring.jar
ADD ilib.jar ilib.jar

RUN (cd app.jar/@project.build.finalName@;tar -cf - src) | (cd ../..;tar -xf -) \
&& (cd app.jar/@project.build.finalName@;tar -cf - opt/att/ajsc/lib) | (cd ../..;tar -xf -) \
&& (cd app.jar/@project.build.finalName@;tar -cf - opt/att/ajsc/config) | (cd ../..;tar -xf -)
RUN (mv monitoring.jar opt/att/ajsc/lib)
RUN (mv ilib.jar opt/att/ajsc/lib)
RUN (rm -rf app.jar)

ENTRYPOINT /startService.sh
我理解此文件中的所有内容,但以下几行除外:

RUN (cd app.jar/@project.build.finalName@;tar -cf - src) | (cd ../..;tar -xf -) \
&& (cd app.jar/@project.build.finalName@;tar -cf - opt/att/ajsc/lib) | (cd ../..;tar -xf -) \
&& (cd app.jar/@project.build.finalName@;tar -cf - opt/att/ajsc/config) | (cd ../..;tar -xf -)

那三条线在干什么?看起来有些目录只是被复制到docker映像中的特定目录中,但是为什么要“untar”而不是简单地使用
COPY
命令?

在您询问的
cd
标题中,将其复制到jar中。这不起作用,至少在典型的unixshell中是这样。所以它很可能是一个名为
app.jar
的目录,而不是jar文件。序列

tar -cf - dir-to-pack | (cd otherdir; tar -xf -)
实际上是一种保留文件模式的递归复制操作。对于设备文件、软链接、硬链接等特殊情况,仅使用
cp-a
可能会有一些不同,但它们是否真正是有意的,还是仅仅是偶然的,取决于制作docker图像的人员的工艺