Docker должен создать приложение Spring и запустить его - PullRequest
0 голосов
/ 27 декабря 2018

Я не могу заставить Docker собрать мое приложение и затем запустить его.У меня есть упражнение, где я не могу предварительно собрать приложение и затем запустить его, Docker должен сделать сборку.

Here's my Dockerfile:
FROM maven:3.5.3-alpine
WORKDIR /usr/src
COPY . .
RUN mvn clean install

COPY ./target/worker-0.0.1-SNAPSHOT.jar worker-0.0.1-SNAPSHOT.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "worker-0.0.1-SNAPSHOT.jar"]

после выполнения docker build -t worker .

Я получаю ошибку:

[INFO] Installing /usr/src/target/worker-0.0.1-SNAPSHOT.jar to /root/.m2/repository/com/heiko/worker/0.0.1-SNAPSHOT/worker-0.0.1-SNAPSHOT.jar
[INFO] Installing /usr/src/pom.xml to /root/.m2/repository/com/heiko/worker/0.0.1-SNAPSHOT/worker-0.0.1-SNAPSHOT.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 41.059 s
[INFO] Finished at: 2018-12-27T16:04:10Z
[INFO] ------------------------------------------------------------------------
Removing intermediate container d8d33baa7558
 ---> 3509c06f8736
Step 5/7 : COPY ./target/worker-0.0.1-SNAPSHOT.jar worker-0.0.1-SNAPSHOT.jar
COPY failed: stat /var/lib/docker/tmp/docker-builder701090107/target/worker-0.0.1-SNAPSHOT.jar: no such file or directory

1 Ответ

0 голосов
/ 27 декабря 2018

Является ли worker-0.0.1-SNAPSHOT.jar чем-то, что mvn clean install создает?COPY копирует файлы с хоста докера в контейнер докера (как вы используете в COPY . ., скопируйте целевой каталог сборки докера в WORKDIR, чтобы скопировать ваш код в контейнер).

Если вы хотите перемещаться по файлам в контейнере, вы должны использовать

RUN cp ./target/worker-0.0.1-SNAPSHOT.jar worker-0.0.1-SNAPSHOT.jar

. Это создаст 2 копии файла в док-контейнере, по одному вцель / работник ... кувшин и один на ./worker...jar.Если вам нужна только одна копия, вам придется вместо этого использовать mv (переместить) и переместить файл в тот же слой, который его создал , в противном случае система наложения докеров в любом случае сохранит старое местоположение,Я думаю, что вы могли бы достичь этого с помощью чего-то вроде:

RUN mvn clean install && mv ./target/worker-0.0.1-SNAPSHOT.jar worker-0.0.1-SNAPSHOT.jar

подсказка для дальнейшей оптимизации размера и безопасности изображения: вы можете сохранить конечное изображение еще меньше, используя многоэтапную сборку (https://aboullaite.me/multi-stage-docker-java/ кажется хорошим объяснением maven.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...