【问题标题】:Micronaut Dockerfile breaks package buildMicronaut Dockerfile 中断包构建
【发布时间】:2019-04-22 10:25:50
【问题描述】:

我使用

创建了一个简单的 Micronaut 应用程序

mn create-app app_name --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 中不包含 docker build。

所以我加入了这个

<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>

它确实设法构建了一个 docker 映像,但并非没有人工干预。原因是在mvn package 上,在target/ 中创建了三个jar:

  • app_name-0.1.jar
  • app_name-0.1-shaded.jar
  • original-app_name-0.1.jar

这使得 docker 目标失败

当对多个源文件使用 COPY 时,目标必须是一个目录并以 / 结尾

该消息确实有意义,因为所有 jar 都与 Dockerfile 中的 COPY 源模式匹配。

现在,我只是删除了另外两个 jar(原始和阴影)并自行运行 docker 目标,但只要我在本地手动模式下工作就可以了。

我是否遗漏了什么,或者这是对 Micronaut 项目创建的疏忽?

【问题讨论】:

    标签: java docker micronaut


    【解决方案1】:

    很遗憾,我无法在 micronaut 配置方面为您提供帮助。但是,如果目的是复制主 jar 文件,而未知版本后缀是导致复制时使用通配符的原因,则可以将 finalName 元素添加到 pom.xml 中,以便从JAR 文件的名称:

    <build>
        <finalName>app_name</finalName>
    </build>
    

    【讨论】:

      【解决方案2】:
      猜你喜欢
      • 1970-01-01
      • 2022-01-15
      • 1970-01-01
      • 2017-12-04
      • 2019-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-20
      相关资源
      最近更新 更多