当前位置: 首页 > 知识库问答 >
问题:

Micronaut Dockerfile中断包构建

那存
2023-03-14

我已经创建了一个简单的Micronaut应用程序,使用

mn创建应用程序app_name--构建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构建。

所以我包括了这个

<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包中,在target/中创建了三个jar:

  • 应用程序名称-0.1。罐子
  • 应用程序名称-0.1-阴影。罐子
  • 原件-app_name-0.1。罐子

这使得docker目标失败

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

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

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

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

共有2个答案

荣俊
2023-03-14

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

后者。

如果您在https://github.com/micronaut-projects/micronaut-profiles/issues我们可以把它弄清楚。

相关文件:

>

  • https://github.com/micronaut-projects/micronaut-profiles/blob/c391ef02b5ca087bbdec79f80b129240b29cc246/service/skeleton/maven-build/Dockerfile

    https://github.com/micronaut-projects/micronaut-profiles/blob/c391ef02b5ca087bbdec79f80b129240b29cc246/service/skeleton/gradle-build/Dockerfile

    谢谢你的意见。

  • 易飞文
    2023-03-14

    不幸的是,我不能帮你配置微星。但是,如果目的是复制主jar文件,并且未知版本后缀是在复制时使用通配符的原因,则可以将finalName元素添加到pom.xml中,以便删除版本信息从JAR文件的名称:

    <build>
        <finalName>app_name</finalName>
    </build>
    
     类似资料:
    • 为什么Eclipse在构建一个Android项目时,会陷入构建工作区的无限循环...和(重新)构建工作区...和(重新)构建工作区... 这是已知的虫子吗? 走出这个循环的正确方法是什么? 备注: 如果取消选中,它会生成良好的版本,甚至导出一个完美运行的签名发行版APK。 此问题仅在我升级到最新的SDK r19后才开始。在此之前(SDK r11),我从未遇到过此问题。 错误160868正好描述了这

    • 当我尝试使用plugin代替plugin( 第一行构建。我的应用程序模块的梯度是 我整个项目的build.gradle 我运行了并启用了选项 我的版本是2.1 如果我使用android而不是dexGuard,那么我就没有问题。 任何帮助或指点都非常感谢。提前致谢。 PS:我没有问题 独立运行 fwiw。

    • 以下Dockerfile一直在构建错误的体系结构: 注:我不能使用buildx,因为我需要为不同的体系结构安装特定的工具 arm64/Dockerfile docker build: docker inspect: 输出:(应该是arm64而不是amd64)?

    • 我正在使用Eclipse Mars 4.5.0 IDE,并使用CFEclipse插件开发ColdFusion应用程序。此外,我还有SVN Subversion和FileSync插件。 我工作的公司有一个巨大的存储库。我将所有文件同步到我自己的工作区,当我在Eclipse中做任何更改时,它应该更新我自己的工作区和服务器中的开发文件夹。 它工作得很好,但是有时候,比如说每周一次,它开始自动构建工作区。

    • 但是当我进行构建时,它无法编译一些引用webapp/WEB-INF/lib文件夹的jar的类。我不能将这些JAR作为依赖项包含在pom.xml中。 如何告诉maven在构建类和创建WAR时也包含WEB-INF/Lib JAR?

    • 我打算在Windows环境下开发Hadoop,所以我首先开始安装如下。 cygwin、cmake、maven、协议缓冲区2.5、Windows SDK v7。一, 然后我将变量设置如下。 M2_HOME=D:\java\apache-maven-3.2.1 平台=Win32 我添加了