Mac M1 芯片上的 Docker 映像构建失败

Die*_*eto 9 java maven docker

我正在尝试在 Maven 项目内构建一个简单的 docker 映像,将映像构建添加为 Maven 构建过程的一部分:

<build>
        <finalName>my-api</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <!-- Docker -->
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>dockerfile-maven-plugin</artifactId>
                <version>1.4.6</version>
                <executions>
                    <execution>
                        <id>default</id>
                        <goals>
                            <goal>build</goal>
                            <!-- <goal>push</goal> -->
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <repository>reponame/${project.name}</repository>
                    <tag>${project.version}</tag>
                    <skipDockerInfo>true</skipDockerInfo>
                </configuration>
            </plugin>

        </plugins>

    </build>
Run Code Online (Sandbox Code Playgroud)
FROM openjdk:8-jdk-alpine
VOLUME /tmp
EXPOSE 8080
ADD target/*.jar app.jar
ENTRYPOINT [ "sh", "-c", "java -jar /app.jar" ]
Run Code Online (Sandbox Code Playgroud)

但它失败了,总是得到相同的错误跟踪,无论我使用哪个图像,错误仍然存​​在。

错误:

引起原因:com.spotify.docker.client.shaded.javax.ws.rs.ProcessingException:java.lang.UnsatisfiedLinkError:无法加载 FFI 提供程序 jnr.ffi.provider.jffi.Provider

引起:java.lang.UnsatisfiedLinkError:java.lang.UnsatisfiedLinkError:/private/var/folders/hz/rgppp8250rsdp86kf_tfjvqw0000gp/T/jffi8502916075702391528.dylib:dlopen(/private/var/folders/hz/rgppp8250rsdp 86kf_tfjvqw0000gp/T/jffi8502916075702391528.dylib ,0x0001):尝试:'/private/var/folders/hz/rgppp8250rsdp86kf_tfjvqw0000gp/T/jffi8502916075702391528.dylib'(胖文件,但缺少兼容的体系结构(有'i386,x86_64',需要'arm64e')),'/usr /lib/jffi8502916075702391528.dylib'(没有这样的文件)

我尝试过的其他图像:

  • openjdk:13-alpine3.9
  • openjdk:8-jre-alpine3.9
  • azul/zulu-openjdk-alpine:17.0.2-17.32.13-arm64

我的java版本:openjdk版本“11.0.13”2021-10-19 LTS

我的 Docker 版本:Docker 版本 20.10.11,内部版本 dea9396

提前致谢。

Bep*_*e C 15

看起来dockerfile-maven-plugin使用基于 x86 架构的运行时,无法在 Apple M1 (Arm) 上运行。
该插件现在处于非活动状态,因此您应该尝试其他东西,例如fabric8-maven-plugin

          <plugin>
            <groupId>io.fabric8</groupId>
            <artifactId>docker-maven-plugin</artifactId>
            <version>0.38.1</version>
            <executions>
                <execution>
                    <id>build</id>
                    <phase>pre-integration-test</phase>
                    <goals>
                        <goal>build</goal>
                    </goals>
                </execution>
            </executions>
        </plugin> 
Run Code Online (Sandbox Code Playgroud)


jos*_*eph 8

两个 Spotify docker maven 插件都不再维护。他们需要将其依赖项升级到支持 aarch64 的版本。

在我们的例子中,需要进行大量的重构才能转移到fabric8的插件或使用maven exec,所以我们想继续使用spotify插件。

<dependencies>幸运的是,您可以通过向插件部分添加一个部分来强制插件使用特定的依赖项。

                <plugin>
                    <groupId>com.spotify</groupId>
                    <artifactId>dockerfile-maven-plugin</artifactId>
                    <version>1.4.6</version>
                    <dependencies>
                        <dependency>
                            <groupId>com.github.jnr</groupId>
                            <artifactId>jnr-unixsocket</artifactId>
                            <version>0.38.14</version>
                        </dependency>
                    </dependencies>
                </plugin>

Run Code Online (Sandbox Code Playgroud)

  • 为不断编辑此回复而道歉...这可以使用上述版本(谢谢)。我尝试更新到该插件的最新版本 (1.4.13),这给了我一个错误,但使用 1.4.6 在我的 M1 Macbook 上运行良好(因为它之前在我的英特尔 Mac 上运行)。 (2认同)