Неполадки при чтении команд Dockerfile: можно ли перейти в файл jar?и что делает tar -cf? - PullRequest
0 голосов
/ 25 июня 2018

У меня есть следующий 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 -)

Что делают эти три строки?Похоже, что некоторые каталоги просто копируются в определенные каталоги в образе докера, но почему вместо «просто использовать команду COPY?» Вместо «* 1008»?

1 Ответ

0 голосов
/ 25 июня 2018

В заголовке вы спрашиваете о cd в банку. Это не работает, по крайней мере, в типичной оболочке UNIX. Поэтому, скорее всего, это каталог с именем app.jar, а не файл JAR. Последовательность

tar -cf - dir-to-pack | (cd otherdir; tar -xf -)

действительно рекурсивная операция копирования, сохраняющая режимы файла. Что касается особых случаев, таких как файлы устройств, программные ссылки, жесткие ссылки, может быть несколько отличий от использования cp -a, но от того, предназначены ли они на самом деле или просто случайно, зависит от мастерства человека, который подготовил изображение докера.

...