Я создал простое приложение Micronaut, используя
mn create-app имя_приложения - build maven
с JDK 11 в случае, если это имеет значение.
Это создает проект maven, который прекрасно компилируется, но включает Dockerfile
, например:
FROM adoptopenjdk/openjdk11-openj9:jdk-11.0.1.13-alpine-slim
COPY target/app_name*.jar app_name.jar
EXPOSE 8080
CMD java -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -Dcom.sun.management.jmxremote -noverify ${JAVA_OPTS} -jar app_name.jar
Однако в Maven AFAICT не включена сборка докера.
Так что я включил это
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>${dockerfile-maven-version}</version>
<executions>
<execution>
<id>default</id>
<goals>
<goal>build</goal>
<goal>push</goal>
</goals>
</execution>
</executions>
<configuration>
<repository>dockerUser/app_name</repository>
<tag>${project.version}</tag>
<buildArgs>
<JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>
</plugin>
, который действительно может создать образ докера, но не без ручного вмешательства. Причина в том, что при mvn package
три баночки создаются в target/
:
- app_name-0.1.jar
- имя_приложения-0,1-shaded.jar * * 1 025
- оригинал-app_name-0.1.jar
, что приводит к сбою цели докера с
При использовании COPY с более чем одним исходным файлом, адрес назначения должен быть каталогом и заканчиваться на /
Это сообщение имеет смысл, потому что все банки соответствуют шаблону источника COPY в Dockerfile
.
Прямо сейчас я просто удаляю два других jar-файла (оригинальный и затененный) и запускаю цель докера самостоятельно, но это нормально, пока я работаю в локальном ручном режиме.
Я что-то упустил или это упущение при создании проекта Micronaut?