Сбой многоэтапной сборки Docker при копии с предыдущего этапа

Я работаю над многоступенчатым файлом сборки докеров, пытаясь добавить дополнительный файл войны к нашему базовому образу tomcat. Я запускаю это локально на рабочей станции Windows 10 с Docker для Windows версии 2.3.0.4, который использует версию ядра докера 19.03.12.

Мой исходный файл докеров выглядел так

FROM tomcat:9.0.21-jdk8-openjdk

RUN rm -rf /usr/local/tomcat/webapps/*

COPY logging.properties /usr/local/tomcat/conf
COPY tomcat-users.xml /usr/local/tomcat/conf
COPY jt400-jdk8-9.7.jar /usr/local/tomcat/lib
COPY mysql-connector-java-8.0.12.jar /usr/local/tomcat/lib
COPY ojdbc6.jar /usr/local/tomcat/lib
COPY hazelcast-all-3.12.jar /usr/local/tomcat/lib
COPY hazelcast-tomcat85-sessionmanager-1.1.3.jar /usr/local/tomcat/lib
COPY hazelcast-client.xml /usr/local/tomcat/lib
COPY applicationinsights-agent-2.5.1.jar /usr/local/tomcat/lib

Я хочу собрать пси-зонд из источника и добавить файл войны к этому базовому образу. Вот что у меня есть

FROM maven:3.6.3-openjdk-8 as buildprobe

RUN git clone https://github.com/psi-probe/psi-probe && cd psi-probe

WORKDIR /psi-probe

RUN mvn package && ls -l /psi-probe && ls -l /psi-probe/psi-probe-web/target

FROM tomcat:9.0.21-jdk8-openjdk

RUN rm -rf /usr/local/tomcat/webapps/*

COPY --from=buildprobe /psi-probe/psi-probe-web/taget/probe.war /usr/local/tomcat/webapps

Я могу запустить docker build --target buildprobe -t buildprobe -f Dockerfile ., и результат будет готов.

ПРИМЕЧАНИЕ. Я добавил команды ls после mvn package в попытке отладить, что происходит.

Выходные данные пакета maven и обеих команд ls (усечены)

[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary for psi-probe 3.5.1-SNAPSHOT:
[INFO]
[INFO] psi-probe .......................................... SUCCESS [01:07 min]
[INFO] psi-probe-core ..................................... SUCCESS [01:53 min]
[INFO] psi-probe-rest ..................................... SUCCESS [  5.945 s]
[INFO] psi-probe-tomcat7 .................................. SUCCESS [ 14.019 s]
[INFO] psi-probe-tomcat85 ................................. SUCCESS [ 13.403 s]
[INFO] psi-probe-tomcat9 .................................. SUCCESS [  9.391 s]
[INFO] psi-probe-web ...................................... SUCCESS [ 39.060 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  04:30 min
[INFO] Finished at: 2020-08-12T14:39:19Z
[INFO] ------------------------------------------------------------------------
(ls -l /psi-probe)
...
-rw-r--r-- 1 root root 70248 Aug 12 14:29 pom.xml
drwxr-xr-x 1 root root  4096 Aug 12 14:36 psi-probe-core
drwxr-xr-x 1 root root  4096 Aug 12 14:38 psi-probe-rest
drwxr-xr-x 3 root root  4096 Aug 12 14:29 psi-probe-tomcat10
drwxr-xr-x 1 root root  4096 Aug 12 14:38 psi-probe-tomcat7
drwxr-xr-x 1 root root  4096 Aug 12 14:38 psi-probe-tomcat85
drwxr-xr-x 1 root root  4096 Aug 12 14:38 psi-probe-tomcat9
drwxr-xr-x 1 root root  4096 Aug 12 14:38 psi-probe-web
drwxr-xr-x 3 root root  4096 Aug 12 14:29 src
...
(ls -l /psi-probe/psi-probe-web/target)
drwxr-xr-x 2 root root     4096 Aug 12 14:38 classes
drwxr-xr-x 3 root root     4096 Aug 12 14:39 jspc
drwxr-xr-x 2 root root     4096 Aug 12 14:39 maven-archiver
drwxr-xr-x 7 root root     4096 Aug 12 14:39 probe
-rw-r--r-- 1 root root 27372423 Aug 12 14:39 probe.war
drwxr-xr-x 2 root root     4096 Aug 12 14:39 test-classes
-rw-r--r-- 1 root root    33350 Aug 12 14:39 webfrag.xml

Однако когда сборка переходит на этап 1 (FROM tomcat:9.0.21-jdk8-openjdk), команда COPY завершается ошибкой с

COPY failed: stat /var/lib/docker/overlay2/81826a6b59d58818c342f1d5536489f4658be5e8557084ec572780aaf6ea19bc/merged/psi-probe/psi-probe-web/taget/probe.war: no such file or directory

У меня есть аналогичный файл докеров для приложения angular, над которым я работаю. Этот файл читается так:

FROM node AS build

WORKDIR /app

ENV PATH /app/node_modules/.bin:$PATH

COPY package.json /app/package.json
RUN npm install && npm install -g @angular/cli

COPY . /app

RUN ng build --output-path=dist

FROM nginx

COPY --from=build /app/dist /usr/share/nginx/html

EXPOSE 80

CMD ["nginx", "-g", "daemon off;"]

В этом файле COPY из предыдущего этапа работает нормально, и образ строится

Я просто не уверен, что происходит не так, пытаясь создать пси-зонд из источника, а затем включить вывод в мой образ tomcat.


person Paul Stoner    schedule 12.08.2020    source источник


Ответы (1)


Это выполнит свою работу:

FROM maven:3.6.3-openjdk-8 as buildprobe
RUN git clone https://github.com/psi-probe/psi-probe && cd psi-probe
WORKDIR /psi-probe
RUN mvn package && ls -l /psi-probe && ls -l /psi-probe/psi-probe-web/target

FROM tomcat:9.0.21-jdk8-openjdk
RUN rm -rf /usr/local/tomcat/webapps/*
COPY --from=buildprobe /psi-probe/psi-probe-web/target/probe.war /usr/local/tomcat/webapps

Вам не хватало r

person Neo Anderson    schedule 12.08.2020
comment
Спасибо, добрый сэр. Я смотрел на это последние два дня, не замечая опечатки. Мне нужно, чтобы этот проект закончился (он говорит, что зная, что этого никогда не будет) - person Paul Stoner; 12.08.2020
comment
Добро пожаловать. Я тоже смотрел на него пару минут, пытаясь найти другие возможные причины, такие как привилегированные слова, разрешения и т. Д. Спасибо за отзыв! Иногда наш мозг может просто прочитать такие фразы Это не значит, что кто-то из читателей знает, единственное, что нужно сделать, - это то, что первый, и он должен быть в правильном месте - person Neo Anderson; 12.08.2020
comment
Неплохо. Я люблю это. Назовем это просто успешной экспертной оценкой. - person Paul Stoner; 13.08.2020