Java 读取Dockerfile命令时出现问题:是否可以将cd刻录到jar文件中?那么tar-cf做什么呢?
我有以下Dockerfile: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
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图像的人员的工艺